From noreply@seminar-singapore.com Mon Aug 1 00:20:45 2016 Return-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.1 required=5.0 tests=HTML_FONT_LOW_CONTRAST, HTML_MESSAGE,REMOVE_BEFORE_LINK,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 9E3257CB5 for ; Mon, 1 Aug 2016 00:20:45 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6F30F8F8039 for ; Sun, 31 Jul 2016 22:20:42 -0700 (PDT) X-ASG-Debug-ID: 1470028836-0bf57c136926afa0001-NocioJ Received: from seminar-singapore.com (seminar-singapore.com [153.92.230.9]) by cuda.sgi.com with ESMTP id J752xiu2BOY72wyV for ; Sun, 31 Jul 2016 22:20:36 -0700 (PDT) X-Barracuda-Envelope-From: noreply@seminar-singapore.com X-Barracuda-Effective-Source-IP: seminar-singapore.com[153.92.230.9] X-Barracuda-Apparent-Source-IP: 153.92.230.9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seminar-singapore.com; q=dns/txt; s=mail; bh=v7PT7esWLOgOj1bDSqF3c7Y3hnc6EiHBT8FITCYEgmg=; h=from:reply-to:subject:date:mime-version:content-type:list-id:list-unsubscribe; b=Ct36bkKPnPuDWsZFn7KlO8jw+dQcSix69d8PP5mp8w+LZEoAvKckAB1XCaBHrDkbRaLuRwewS7zx dCHK7xhbGcnnCgYDGSDc/XLNd93/wtd6S/W7bLYtkqwj8sVaDDDv93NB1VMXtJ3XeOiVG9d1HDmN nnxyRrEjQOh4gHdR0Bo= To: Subject: =?UTF-8?Q?Boost_Up_Your_Productivity_with_Timesaving_Tips_and_Tricks_in_Microsoft_2013?= From: =?UTF-8?Q?Aventis=20Learning=20Group?= X-ASG-Orig-Subj: =?UTF-8?Q?Boost_Up_Your_Productivity_with_Timesaving_Tips_and_Tricks_in_Microsoft_2013?= List-Id: MTIxNjQ5OC00NTYwNjczLTExMA== List-Unsubscribe: , Content-Type: multipart/alternative; boundary="-------?=_34446-9758955111934" MIME-Version: 1.0 Precedence: bulk Feedback-ID: ded_153.92.230.9:1216498:1216498_118:Sendinblue X-Mailer: Sendinblue X-Mailin-Client: 1216498 X-Mailin-Campaign: 118 Reply-To: fta@aventisglobal.edu.sg Message-Id: <201608010704.pqbd6282lpe4zj@seminar-singapore.com> Date: Mon, 01 Aug 2016 07:04:26 +0200 X-Barracuda-Connect: seminar-singapore.com[153.92.230.9] X-Barracuda-Start-Time: 1470028836 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 46608 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, REMOVE_BEFORE_LINK X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 REMOVE_BEFORE_LINK BODY: Removal phrase right before a link -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 ---------?=_34446-9758955111934 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable MS Excel 2013 Basics for Business Analysis and Reporting =C2=A0 [ View i= n browser ]( http://r.seminar-singapore.com/2s7fnl5jktpe4zf.html ) =C2= =A0 Microsoft Excel 2013 Basics for Business Analysis and Reporting= Boost Up Your Productivity with Timesaving Tips =C2=A0in Micro= soft =C2=A02013=0A14 - 15 Sep 2016 (Wed & Thu)| Concorde Hotel, Singapore = =C2=A0=0A=0AYour Challenge: How to replace manual tracking of busine= ss data to automated reports=0A=C2=A0=0ADo you want to learn how to:=0A= =C2=A0=0AEasily identify data trends using graphs or charts? Quickly store,= sort, and analyze large amounts of data/information? Perform mathematical = operations with ease?=0A=C2=A0=0AReplacing manual tracking of business data= to automated templates will make it easy for you to monitor financial perf= ormance, such as business profit or loss, calculate payments on large purch= ases, plan a budget, or stay organized with checklists.=0A=C2=A0=0AOur Solu= tion: MS Excel 2013 tips and tricks=0A=C2=A0=0AMicrosoft Excel is one of th= e most powerful tools in Microsoft Office Suite of Microsoft Office applica= tion. This application is used intensively to keep track of important data = that drives the business.=0A=C2=A0=0AYou can use Microsoft Excel to manage = all your business data such as maintain customer lists, create employee sch= eduling, prepare Financial Statements, find business templates, calculate t= he costs of your business using formulas, and prepare impressive business r= eports.=C2=A0=0A=C2=A0=0A=C2=A0=0AKey Takeaways=0A=C2=A0=0AThis workshop wi= ll prepare you to start using Excel on your own. Throughout the course, you= will learn interesting and useful tips and tricks to allow you work more e= fficiently with Excel.=0A=C2=A0=0AReady-made templates online for free Lear= n to create your own customized templates. Prepare Income Statements, Cash = Flows and Balance Sheet. Formatting reports using conditional formatting ru= les and styles. Calculating the costs of doing business with financial form= ulas. Create interactive charts with data stored in an Excel Table. Summari= ze data with interactive PivotTable and PivotChart.=0A=C2=A0=0A=0ANote: Par= ticipants are required to bring a laptop with Microsoft Excel 2013. = =C2=A0 =C2=A0=0A=0ATestimonials=0A=C2=A0=0A=E2=80=9CWell done Valene! R= eally enjoy this class. You have been very patient and helpful" - Manager, = Prudential Assurance=0A=0A=E2=80=9CExcellent! I will definitely recommend t= his workshop" - Manager, National Police=0A=C2=A0 =C2=A0 =C2=A0 = Microsoft Business Expert=C2=A0 =C2=A0=0AValene Ang is a Microsoft Cer= tified Trainer and Master Instructor of Microsoft Office Specialist (MOS). = She brings with her 20 years' experience in corporate training and consulta= ncy. Valene has a broad experience in customizing Microsoft Office training= programs, developing customized course outline and course material, assist= ing corporate clients in business data analysis and providing dynamic repor= t solutions. =C2=A0 =C2=A0=0AEVENT DETAILS=0A=C2=A0=0ADate: 14 & 15 = September=0ATime: 9.00am to 5.00pm=0AVenue: 100 Orchard Road Concorde Hotel= , #04-100=0AInvestment Fee: Only S$870 After PIC Grant of 40%=0A=C2=A0=0AC= ontact Us:=C2=A0Ms Vivian Lee|=C2=A06720 3333 |=C2=A0vivian@aventisglobal.e= du.sg =C2=A0 =C2=A0 [ > REGISTER HERE <=C2=A0 ]( http://r.semin= ar-singapore.com/b4tqmcm6b19pe4zd.html ) =C2=A0 =C2=A0=0A=0AThis e= mail was sent to xfs@oss.sgi.com=0AYou received this email because you are = registered with FT Academy=0A=C2=A0=0A[ Unsubscribe here ]( http://r.semina= r-singapore.com/2s7fnl5jktpe4zg.html ) =C2=A0=0A=0ASent by=0A[ ]( http:/= /r.seminar-singapore.com/b4tqmcm6btppe4zd.html ) =C2=A0 =C2=A0=0A=0A= =C2=A9 2016 Financial Training Academy =C2=A0 ---------?=_34446-9758955111934 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Boost Up Your Productivity with Timesaving T= ips and Tricks in Microsoft 2013 =0A=0A=0A=0A=09=0A=09=0A=0A=09=0A=0A=09= =09=0A=09=09=0A=09=0A=0A=09=09=0A=09=09=0A =0A=0A =
MS Excel 2013 Basics for= Business Analysis and Reporting
=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A= =0A=09=09=09=0A=09=09=09=0A=09=09=09=09=0A=09=09=09=09=09=0A=09=09=09=09=09=0A=09=09=09=09=0A=09=09=09
=0A=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09= =09= =0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09= =09=09=09=0A=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09= =09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09
 
=0A=09=09=09=09= =09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09View in bro= wser=0A=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09
&nb= sp;
= =0A=09=09=09=09=09
=0A= =09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A =0A=09=09= =09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09= =09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A= =09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09= =0A=09=09=09=0A=09=09=09=0A=0A =0A =0A =0A= =0A=0A =0A =0A =0A=0A=09=09
=0A=0A=09=09=09=0A=09=09=09=0A= =09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09= =0A=09=09=09=0A=0A =0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09= =09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A= =09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09= =0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A = =0A =0A =0A =0A =0A =0A=0A
=0A = =0A=0A =0A =0A = =0A =0A=0A = =0A =0A =0A= =0A=0A=0A =0A =
=0A=0A =0A =
=0A=0A = =0A =0A=0A= =0A = =0A = =0A=0A = =0A = =0A = =0A =0A = =0A = =0A = =0A = =0A =0A= =0A
=0A=0A = =0A=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09= =09=09Microsoft Excel 2013 Basics= for Business Analysis and Reporting=0A =
=0A = =0A=0A =
=0A=0A =0A
=0A=0A
=0A =0A=0A=0A =0A = =0A =0A=0A=09=09=0A=09=0A=0A=09=09=0A=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09= =09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A =0A= =09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09= =0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09= =09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09= =09=09=0A=09=09=09=0A=09=09=09=0A=0A =0A = =0A =0A =0A =0A= =0A =0A=0A
=0A =0A=0A = =0A = =0A =0A = =0A =0A=0A =
=0A=0A =0A =0A=0A =0A = =0A = =0A=0A=0A=0A =0A =
=0A=0A = =0A = =0A=0A = =0A = =0A = =0A=0A = =0A =0A = =0A = =0A= =0A = =0A = =0A = =0A = =0A=0A =
=0A=0A = =0A=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09Boost Up Your Productiv= ity with Timesaving Tips  in Microsoft  2013
= =0A14 - 15 Sep 2016 (Wed & Thu)| Concorde Hotel, Singapore
=0A
=0A =0A=0A =
=0A=0A =
=0A=0A
=0A =0A=0A=0A = =0A =0A =0A=0A=09=09=0A=09=0A=0A=09=09= =0A=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09= =09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A= =0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09= =0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09= =09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09= =09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A =0A = =0A =0A=0A=0A =0A =0A =0A =0A= =0A =0A
=0A =0A =0A=0A =0A = =0A =0A = =0A =0A = =0A =0A = =0A =0A = =0A
 
=0A=0A = =0A = =0A = =0A =0A = =0A =0A =0A
=0A=0A = =0A = =0A =0A = =0A = =0A=0A = =0A = =0A = =0A = =0A = =0A = =0A=0A
=0A
Your C= hallenge: How to replace manual tracking of business data to automated repo= rts
=0A=0A
<= span style=3D"font-size:18px;"> 
=0A=0A
Do you want to learn how to:
=0A=0A
 
=0A=0A
    =0A=09
  • Ea= sily identify data trends using graphs or charts?
  • =0A=09<= li style=3D"text-align: justify;">Quickly store, sort, and analyze large amounts of dat= a/information?=0A=09
  • <= span style=3D"color:#000000;">Perform mathe= matical operations with ease?
  • =0A
=0A=0A
 
=0A=0A
Replacin= g manual tracking of business data to automated templates will make it easy= for you to monitor financial performance, such as business profit or loss,= calculate payments on large purchases, plan a budget, or stay organized wi= th checklists.
=0A=0A
 
=0A=0A
Our Solution: MS Excel 2013 tips and tricks<= /span>
=0A=0A
 
=0A=0A
Microsoft Excel= is one of the most powerful tools in Microsoft Office Suite of Microsoft O= ffice application. This application is used intensively to keep track of im= portant data that drives the business.
=0A=0A
 =0A=0A
<= span style=3D"font-size:16px;">You can use Microsoft Excel to manage all yo= ur business data such as maintain customer lists, create employee schedulin= g, prepare Financial Statements, find business templates, calculate the cos= ts of your business using formulas, and prepare impressive business reports= . 
=0A=0A
 
=0A=0A
 
=0A=0A
Key Takeaways
=0A= =0A
 
=0A=0A
This workshop will prepare you to start using Excel on your own. Thro= ughout the course, you will learn interesting and useful tips and tricks to= allow you work more efficiently with Excel.
=0A=0A
 =
=0A=0A
    =0A=09
  • Ready-made templates online fo= r free
  • =0A=09
  • Learn to create your = own customized templates.
  • =0A=09
  • Pr= epare Income Statements, Cash Flows and Balance Sheet.
  • = =0A=09
  • Formatting reports using conditional formattin= g rules and styles.
  • =0A=09
  • Calculat= ing the costs of doing business with financial formulas.
  • = =0A=09
  • Create interactive charts with data stored in = an Excel Table.
  • =0A=09
  • = Summarize da= ta with interactive PivotTable and PivotChart.
  • =0A
= =0A=0A
 
=0A=0A

=0ANote:= Participants are required to bring a laptop with Microsoft Excel 2013.
=0A
=0A
=0A= =0A =0A =
=0A=0A =
 
= =0A=0A
=0A =0A=0A=09=09=0A=09=0A=0A=09=09=0A= =09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09= =09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A = =0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A= =0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09= =0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09= =09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A =0A = =0A =0A=0A=0A =0A =0A =0A =0A = =0A
=0A =0A =0A=0A =0A = =0A =0A = =0A =0A = =0A= =0A =0A = =0A =0A
 
=0A=0A = =0A = =0A = =0A =0A = =0A =0A =
=0A=0A = =0A = =0A =0A = =0A = =0A=0A = =0A = =0A = =0A = =0A =0A = =0A=0A =
=0A
Testimonials=0A=0A
 
=0A=0A
=E2=80=9CWell done Valene! Really enjoy this clas= s. You have been very patient and helpful" - Manager, Prudential As= surance
=0A
=0A=E2=80=9CExcellent! I will definitely recomme= nd this workshop" - Manager, National Police
=
=0A=0A
 
=0A=0A
=0A=0A = =0A =0A
=0A=0A
 
=0A=0A =0A
=0A =0A= =0A=09=09=0A=09=0A=0A=09=09=0A=09=09=0A=0A= =09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A= =0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A =0A=09=09=09=0A=09=09= =09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=09=0A=09=09=09=09=09=0A=09=09=09=09=09=0A=09=09=09=09=09=09=0A=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09= =0A= =09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09= =09=09=0A=09=09=09=09=09=09=09=09=0A=0A=09=09=09= =09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09= =09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09
 
=0A=0A=09=09=09=09=09=09=09=09=09=0A=09= =09=09=09=09=09=09=09=09=09=0A=0A=09=09=09=09=09=09=09=09=09=09= =09=0A=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=0A=0A=09=09=09=09= =09=09=09=09=09=09=09= =0A=09=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09= =09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=0A= =09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09= =09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09= =09=09=09=09=09=09=09=09=09=0A=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=0A= =09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09= =09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09= =09=09=09=09=09=09=0A=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09= =09=09=09=09=09=09=09=09=09=09=0A = =0A =0A=0A=09= =09=09=09=09=09=09=09=09=09=09=09
=0A=0A=09=09=09=09=09=09= =09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=0A=0A=09=09=09=09=09=09=09=09= =09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09= =09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09= =09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09= =09=09=09=09=09=09=09=09=09=0A=0A=09=09=09=09=09=09=09=09=09=09=09=09
=0A =0A = =0A = =0A = 3D""=0A=09=09=09=09=09=09=09=09=09=09=09=09= =09=09
=0A=09=09=09=09=09=09=09=09=09=09=09=09=0A=0A=09=09=09=09=09=09= =09=09=09=09=09
=0A=0A=09= =09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=0A=0A=09=09=09=09=09=09= =09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09
=0A=09=09=09=09=09= =09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=09= =09=0A =0A=09=09= =09=09=09=09=09=09=09=09=09=09=09=09=09Micr= osoft Business Expert =0A=09=09=09=09=09=09=09=09= =09=09=09=09=09=09
=  
Valene Ang is a Microsoft Certified Trainer and Master Instructor= of Microsoft Office Specialist (MOS). She brings with her 20 years' experi= ence in corporate training and consultancy. Valene has a broad experience i= n customizing Microsoft Office training programs, developing customized cou= rse outline and course material, assisting corporate clients in business da= ta analysis and providing dynamic report solutions.
=0A<= /td>=0A=09=09=09=09=09=09=09=09=09=09=09=09=09
=0A=09=09=09=09=09=09=09= =09=09=09=09=09=0A=0A=09=09=09=09=09=09=09=09=09=09=09
=0A=0A= =09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09= =09=09=09=0A=09=09=09=09=09=09=09=09 =0A=09=09=09=09=09=09=09=0A=09=09= =09=09=09=09=0A=0A=09=09=09=09=09=0A=09=09=09=09= =0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09= =09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A= =09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A =0A = =0A =0A=0A=0A =0A =0A =0A= =0A=09=09=0A=09=0A=0A=09=09=0A=09=09=0A=0A= =09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A= =0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A =0A=09=09=09=0A=09=09= =09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09= =09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A= =09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09= =0A=09=09=09=0A=0A =0A =0A =0A=0A=0A = =0A =0A = =0A =0A =0A=09=0A=0A=09=09=0A=09=09
=0A = =0A =0A=0A = =0A =0A = =0A =0A = =0A =0A=09=0A=0A=09=09= =0A=09=09=0A=09=09=09=09=0A=09=09=09
 
=0A=0A =0A =0A = =0A = =0A =0A = =0A =0A = =0A = =0A =0A =0A=0A =0A =0A <= /tbody>
=0A=0A = =0A =0A = =0A = =0A =0A=0A = =0A =0A =0A = =0A = =0A = =0A=0A =0A=0A =0A = =0A = =0A
EVE= NT DETAILS =0A=0A
 
=0A=0A
<= span style=3D"font-size:16px;">Date: 14 &= ; 15 September
=0A=0A
Time: 9.00am to 5.00pm
= =0A=0A
V= enue: 100 Orchard Road Concorde Hotel , #04-100
=0A=0AInvestmen= t Fee: Only S$870 After PIC Grant of 40%=0A=0A
 
=0A=0A
Contact Us: Ms Vivian Lee| 6720 3333 | vivian@avent= isglobal.edu.sg
=0A
=0A=0A =
 
=0A =0A=0A=09=09
=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09= =09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A= =0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09= =0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=09= =0A=09=09=09=09=09=0A=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A= =09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09
=0A=09=09=09=09=09=09=0A=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09= =09=09=09=0A=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=0A= =09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09= =09=0A=09=09=09=09=09=09=09=09=09
 
=0A=0A=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09
=0A=0A=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09= =09=09=09=0A=0A=09=09=09= =09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09= =09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=0A=09=09=09=09=09=09= =09=09=09=09=09=09
=0A= =09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09= =09=09=09=09=09=09=0A=09= =09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09= =09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09= =09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09= =09=09=09=09=09=09=09=09=09=09=09=09=09=09
=0A=09=09=09= =09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09= =09=09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=0A=09= =09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09> REGI= STER HERE < =0A=09=09=09=09=09=09=09=09=09=09=09=09=09= =09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09= =09=09
=0A=09=09=09=09= =09=09=09=09=09=09=09=09=09=09
=0A=09=09=09=09=09=09=09=09=09=09=09=09= =0A=0A=09=09=09=09=09=09=09=09=09=09=09
=0A=0A=09=09=09=09=09= =09=09=09
 
=0A=0A=09=09=09=09=09
=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09= =09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A = =0A =0A =0A=0A=0A =0A = =0A =0A=0A=09=09
=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09= =09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A =0A= =09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09= =0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09= =09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=09=0A=09=09=09= =09=09=0A=09=09=09=09=09=0A=09=0A=0A=09=09=0A=09=09
=0A=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A= =09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=0A=09=09=09=09= =09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=0A=09=09= =09=09=09=09=09=0A =0A=09=09=09=09=09= =09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09= =09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=0A=09=09=09=09=09=0A=09=09=09=09=0A=09=09=09
 
=0A=09=09=09=09= =09=09=09=09=09
This = email was sent to xfs@oss.sgi.com=0A
You received this email because yo= u are registered with FT Academy
=0A=0A
 
=0A
=0A=0A=09=09=09=09=09=09=09=09=09
=0A=09= =09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09=09Unsubscribe here=0A=09=09=09=09=09= =09=09=09=09
=0A
 
=0A=09=09=09=09=09=09=09=09=09=0A =
=0A =
Sent by
=0A 3D"SendinBlue"<= /a>=0A
=0A=09=09=09=09=09=09=09=09=
=  
= =0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A =0A = =0A =0A=0A=0A =0A =0A = =0A=0A=09=09
=0A= =0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09= =0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A =0A=09=09=09=0A=09= =09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A= =09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09=09= =0A=09=09=09=0A=0A=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A=09=09=09=0A=09=09= =09=0A=09=09=09=09<= tbody>=0A=09=09=09=09=09=0A=09=09=09=09=09
=0A=09=09=09=09=09=09= =0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=0A=09=09=09=09= =09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=0A=09= =09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09= =09=09=09=09=09=09=0A=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=0A=09=09=09=09=09=0A=09=09=09=09=0A=09=09=09=0A=09=09=09=0A=0A =0A =0A =0A=0A=0A = =0A =0A =0A=0A=09=09=0A=09=0A
 
=0A= =09=09=09=09=09=09=09=09=09=0A=09=09=09=09=09=09=09=09=09
=C2= =A9 2016 Financial Training Academy
=0A
=0A=09=09=09=09=09=09=09= =09
 
=0A=0A
---------?=_34446-9758955111934-- From info9@kitchen-helper.com Mon Aug 1 00:21:22 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B10B17CBA for ; Mon, 1 Aug 2016 00:21:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 402998F8035 for ; Sun, 31 Jul 2016 22:21:10 -0700 (PDT) X-ASG-Debug-ID: 1470028866-0bf8157e6d318d50001-NocioJ Received: from kitchen-helper.com ([115.214.61.209]) by cuda.sgi.com with SMTP id g6Nb75EsPEIh0K7x for ; Sun, 31 Jul 2016 22:21:07 -0700 (PDT) X-Barracuda-Envelope-From: info9@kitchen-helper.com X-Barracuda-Effective-Source-IP: UNKNOWN[115.214.61.209] X-Barracuda-Apparent-Source-IP: 115.214.61.209 Received: from MQZ2E3BNIJH5CCE[127.0.0.1] by MQZ2E3BNIJH5CCE[127.0.0.1] (SMTPD32); Mon, 1 Aug 2016 12:52:59 +0800 From: "yyotsales01@163.com" Subject: sink racks To: xfs@oss.sgi.com X-ASG-Orig-Subj: sink racks MIME-Version: 1.0 Sender: info9@kitchen-helper.com Reply-To: yyotsales01@163.com Date: Mon, 1 Aug 2016 12:52:59 +0800 X-Mailer: Foxmail 6, 13, 102, 15 [cn] Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 Content-Disposition: inline X-Barracuda-Connect: UNKNOWN[115.214.61.209] X-Barracuda-Start-Time: 1470028866 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 19431 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.74 X-Barracuda-Spam-Status: No, SCORE=0.74 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, HTML_MESSAGE, MIME_HTML_ONLY, MISSING_MID, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Message-Id: <20160801052110.5E230D80072@cuda.sgi.com> PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv L0VOIj4NCjxIVE1MIHhtbG5zOm8gPSAidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6 b2ZmaWNlIj48SEVBRD4NCjxNRVRBIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIg aHR0cC1lcXVpdj1jb250ZW50LXR5cGU+DQo8TUVUQSBuYW1lPUdFTkVSQVRPUiBjb250ZW50PSJN U0hUTUwgOC4wMC42MDAxLjIzNTg4Ij48L0hFQUQ+DQo8Qk9EWT4NCjxQIHN0eWxlPSJNQVJHSU46 IDBwdCIgY2xhc3M9TXNvTm9ybWFsPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5O1Rp bWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEycHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5 ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2Vybmlu ZzogMS4wMDAwcHQiPkhpPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5O1Rp bWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEycHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5 ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2Vybmlu ZzogMS4wMDAwcHQiPjxvOnA+PC9vOnA+PC9TUEFOPjwvUD4NCjxQIHN0eWxlPSJNQVJHSU46IDBw dCIgY2xhc3M9TXNvTm9ybWFsPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5O1RpbWVz IE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEycHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMm IzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzog MS4wMDAwcHQiPlRoaXMgDQppczwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMz OTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46ICYj Mzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtl cm5pbmc6IDEuMDAwMHB0Ij4mbmJzcDtRdWVlbmllPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQt RkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEycHQ7IG1zby1z cGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsg bXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPiZuYnNwO2Zyb20gDQo8L1NQQU4+PFNQQU4gDQpz dHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTog MTAuNXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFt aWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij5ZdXlhbyANCk91dGFpIEVs ZWN0cmljYWwgY28uPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5O1RpbWVz IE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEycHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMm IzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzog MS4wMDAwcHQiPi5XZSANCmFyZSBhIHByb2Zlc3Npb25hbCBtYW51ZmFjdHVyZXIgYW5kIGRlc2ln bmVyIGluIDwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcg Um9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMC41cHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5 OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzogMS4w MDAwcHQiPiZuYnNwO21ha2luZyANCjwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTog JiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMC41cHQ7IG1zby1zcGFjZXJ1 bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZv bnQta2VybmluZzogMS4wMDAwcHQiPmtpdGNoZW53YXJlIA0KPC9TUEFOPjxTUEFOIA0Kc3R5bGU9 IkZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEwLjVw dDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog 5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+cHJvZDwvU1BBTj48U1BBTiANCnN0 eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAx MC41cHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1p bHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPnVjdHMscGxhc3RpYyANCmdp ZnRzLGFuZCBob3VzZWhvbGQgcHJvZHVjdHMuPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFN SUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEwLjVwdDsgbXNvLXNw YWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBt c28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+PG86cD48L286cD48L1NQQU4+PC9QPg0KPFAgc3R5 bGU9Ik1BUkdJTjogMHB0IiBjbGFzcz1Nc29Ob3JtYWw+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1J TFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTogMTJwdDsgbXNvLXNwYWNl cnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28t Zm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+QWxsIA0Kb3VyIDwvU1BBTj48U1BBTiANCnN0eWxlPSJG T05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMnB0OyBt c28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovk vZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij5wcm9kdWN0czwvU1BBTj48U1BBTiANCnN0 eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAx MnB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5 OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij4mbmJzcDtoYXZlIA0KYmVlbiBJ U08gOTAwMSwgYW5kIGdldCBhIGhpZ2ggcmVwdXRhdGlvbiBhbmQgaG90IG1hcmtldCBpbiA8L1NQ QU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6IOWui+S9kzsgRk9OVC1TSVpFOiAxMnB0OyBt c28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0OyBt c28tYmlkaS1mb250LWZhbWlseTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgbXNvLWFzY2lp LWZvbnQtZmFtaWx5OiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBtc28taGFuc2ktZm9udC1m YW1pbHk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTsiPkU8L1NQQU4+PFNQQU4gDQpzdHlsZT0i Rk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTogMTJwdDsg bXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L 5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+dXJvcGUgDQphbmQgPC9TUEFOPjxTUEFO IA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiDlrovkvZM7IEZPTlQtU0laRTogMTJwdDsgbXNvLXNwYWNl cnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdDsgbXNvLWJpZGkt Zm9udC1mYW1pbHk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IG1zby1hc2NpaS1mb250LWZh bWlseTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgbXNvLWhhbnNpLWZvbnQtZmFtaWx5OiAm IzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7Ij5OPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFN SUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEycHQ7IG1zby1zcGFj ZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNv LWZvbnQta2VybmluZzogMS4wMDAwcHQiPm9ydGggDQo8L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9O VC1GQU1JTFk6IOWui+S9kzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVz JiMzOTs7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0OyBtc28tYmlkaS1mb250LWZhbWlseTog JiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgbXNvLWFzY2lpLWZvbnQtZmFtaWx5OiAmIzM5O1Rp bWVzIE5ldyBSb21hbiYjMzk7OyBtc28taGFuc2ktZm9udC1mYW1pbHk6ICYjMzk7VGltZXMgTmV3 IFJvbWFuJiMzOTsiPkE8L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGlt ZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTogMTJwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3ll cyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5n OiAxLjAwMDBwdCI+bWVyaWNhPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiDlrovk vZM7IEZPTlQtU0laRTogMTJwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZm9u dC1rZXJuaW5nOiAxLjAwMDBwdDsgbXNvLWJpZGktZm9udC1mYW1pbHk6ICYjMzk7VGltZXMgTmV3 IFJvbWFuJiMzOTs7IG1zby1hc2NpaS1mb250LWZhbWlseTogJiMzOTtUaW1lcyBOZXcgUm9tYW4m IzM5OzsgbXNvLWhhbnNpLWZvbnQtZmFtaWx5OiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7Ij4m bmJzcDs8L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJv bWFuJiMzOTs7IEZPTlQtU0laRTogMTJwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBt c28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBw dCI+YW5kIA0Kb3RoZXIgY291bnRyaWVzLiA8L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1J TFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTogMTJwdDsgbXNvLXNwYWNl cnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28t Zm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+PG86cD48L286cD48L1NQQU4+PC9QPg0KPFAgc3R5bGU9 Ik1BUkdJTjogMHB0OyBtc28tcGFyYS1tYXJnaW4tbGVmdDogMC4wMDAwZ2QiIGNsYXNzPU1zb05v cm1hbD48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5 OzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJl YXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij5Qcm9k dWN0cyANCm1haW5seSBpbmNsdWRlIDwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTog JiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46 ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250 LWtlcm5pbmc6IDEuMDAwMHB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBzdHlsZT0iTUFS R0lOOiAwcHQ7IG1zby1wYXJhLW1hcmdpbi1sZWZ0OiAwLjAwMDBnZCIgY2xhc3M9TXNvTm9ybWFs PjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiDlrovkvZM7IEZPTlQtU0laRTogMTJwdDsgbXNv LXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdDsgbXNv LWJpZGktZm9udC1mYW1pbHk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IG1zby1hc2NpaS1m b250LWZhbWlseTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgbXNvLWhhbnNpLWZvbnQtZmFt aWx5OiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7Ij4mbmJzcDsmbmJzcDs8L1NQQU4+PFNQQU4g DQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0la RTogMTJwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZh bWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+MSkgDQo8L1NQQU4+PFNQ QU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQt U0laRTogMTAuNXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZv bnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij5taWNyb3dhdmUg DQpub29kbGUgYm93bDwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1l cyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMC41cHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5 ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2Vybmlu ZzogMS4wMDAwcHQiPjxvOnA+PC9vOnA+PC9TUEFOPjwvUD4NCjxQIHN0eWxlPSJNQVJHSU46IDBw dDsgbXNvLXBhcmEtbWFyZ2luLWxlZnQ6IDAuMDAwMGdkIiBjbGFzcz1Nc29Ob3JtYWw+PFNQQU4g DQpzdHlsZT0iRk9OVC1GQU1JTFk6IOWui+S9kzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2Vy dW46ICYjMzk7eWVzJiMzOTs7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0OyBtc28tYmlkaS1m b250LWZhbWlseTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgbXNvLWFzY2lpLWZvbnQtZmFt aWx5OiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBtc28taGFuc2ktZm9udC1mYW1pbHk6ICYj Mzk7VGltZXMgTmV3IFJvbWFuJiMzOTsiPiZuYnNwOyZuYnNwOzwvU1BBTj48U1BBTiANCnN0eWxl PSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMnB0 OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDl rovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij4yKSANCjwvU1BBTj48U1BBTiANCnN0 eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAx MC41cHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1p bHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPm1pY3Jvd2F2ZSANCnNvdXAg bXVnPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21h biYjMzk7OyBGT05ULVNJWkU6IDEwLjVwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBt c28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBw dCI+PG86cD48L286cD48L1NQQU4+PC9QPg0KPFAgc3R5bGU9Ik1BUkdJTjogMHB0OyBtc28tcGFy YS1tYXJnaW4tbGVmdDogMC4wMDAwZ2QiIGNsYXNzPU1zb05vcm1hbD48U1BBTiANCnN0eWxlPSJG T05ULUZBTUlMWTog5a6L5L2TOyBGT05ULVNJWkU6IDEycHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5 ZXMmIzM5OzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQ7IG1zby1iaWRpLWZvbnQtZmFtaWx5 OiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBtc28tYXNjaWktZm9udC1mYW1pbHk6ICYjMzk7 VGltZXMgTmV3IFJvbWFuJiMzOTs7IG1zby1oYW5zaS1mb250LWZhbWlseTogJiMzOTtUaW1lcyBO ZXcgUm9tYW4mIzM5OyI+Jm5ic3A7Jm5ic3A7PC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFN SUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEycHQ7IG1zby1zcGFj ZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNv LWZvbnQta2VybmluZzogMS4wMDAwcHQiPjMpIA0KPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQt RkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEwLjVwdDsgbXNv LXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2T OyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+bWljcm93YXZlIA0KcmljZSBjb29rZXI8L1NQ QU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7 IEZPTlQtU0laRTogMTAuNXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJl YXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij48bzpw PjwvbzpwPjwvU1BBTj48L1A+DQo8UCBzdHlsZT0iTUFSR0lOOiAwcHQ7IG1zby1wYXJhLW1hcmdp bi1sZWZ0OiAwLjAwMDBnZCIgY2xhc3M9TXNvTm9ybWFsPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFN SUxZOiDlrovkvZM7IEZPTlQtU0laRTogMTJwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7 OyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdDsgbXNvLWJpZGktZm9udC1mYW1pbHk6ICYjMzk7 VGltZXMgTmV3IFJvbWFuJiMzOTs7IG1zby1hc2NpaS1mb250LWZhbWlseTogJiMzOTtUaW1lcyBO ZXcgUm9tYW4mIzM5OzsgbXNvLWhhbnNpLWZvbnQtZmFtaWx5OiAmIzM5O1RpbWVzIE5ldyBSb21h biYjMzk7Ij4mbmJzcDsmbmJzcDs8L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYj Mzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTogMTJwdDsgbXNvLXNwYWNlcnVuOiAm IzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1r ZXJuaW5nOiAxLjAwMDBwdCI+NCkgDQpkcmFpbiBiYXNrZXQ8L1NQQU4+PFNQQU4gDQpzdHlsZT0i Rk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTogMTAuNXB0 OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDl rovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+ DQo8UCBzdHlsZT0iTUFSR0lOOiAwcHQ7IG1zby1wYXJhLW1hcmdpbi1sZWZ0OiAwLjAwMDBnZCIg Y2xhc3M9TXNvTm9ybWFsPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiDlrovkvZM7IEZPTlQt U0laRTogMTJwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZm9udC1rZXJuaW5n OiAxLjAwMDBwdDsgbXNvLWJpZGktZm9udC1mYW1pbHk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMz OTs7IG1zby1hc2NpaS1mb250LWZhbWlseTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgbXNv LWhhbnNpLWZvbnQtZmFtaWx5OiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7Ij4mbmJzcDsmbmJz cDs8L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFu JiMzOTs7IEZPTlQtU0laRTogMTJwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28t ZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+ NSkgDQpzY29vcCB0cm9vcCBtZWxvbiBiYWxsZXIgYW5kIGZydWl0IHNjb29wIHNldDwvU1BBTj48 U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9O VC1TSVpFOiAxMC41cHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3Qt Zm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPjxvOnA+PC9v OnA+PC9TUEFOPjwvUD4NCjxQIHN0eWxlPSJNQVJHSU46IDBwdDsgbXNvLXBhcmEtbWFyZ2luLWxl ZnQ6IDAuMDAwMGdkIiBjbGFzcz1Nc29Ob3JtYWw+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6 IOWui+S9kzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1z by1mb250LWtlcm5pbmc6IDEuMDAwMHB0OyBtc28tYmlkaS1mb250LWZhbWlseTogJiMzOTtUaW1l cyBOZXcgUm9tYW4mIzM5OzsgbXNvLWFzY2lpLWZvbnQtZmFtaWx5OiAmIzM5O1RpbWVzIE5ldyBS b21hbiYjMzk7OyBtc28taGFuc2ktZm9udC1mYW1pbHk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMz OTsiPiZuYnNwOyZuYnNwOzwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtU aW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46ICYjMzk7 eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5p bmc6IDEuMDAwMHB0Ij42KSANCjwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMz OTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMC41cHQ7IG1zby1zcGFjZXJ1bjog JiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQt a2VybmluZzogMS4wMDAwcHQiPnNpbmsgDQpyYWNrczwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05U LUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMC41cHQ7IG1z by1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9 kzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPjxvOnA+PC9vOnA+PC9TUEFOPjwvUD4NCjxQ IHN0eWxlPSJNQVJHSU46IDBwdDsgbXNvLXBhcmEtbWFyZ2luLWxlZnQ6IDAuMDAwMGdkIiBjbGFz cz1Nc29Ob3JtYWw+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6IOWui+S9kzsgRk9OVC1TSVpF OiAxMnB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mb250LWtlcm5pbmc6IDEu MDAwMHB0OyBtc28tYmlkaS1mb250LWZhbWlseTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5Ozsg bXNvLWFzY2lpLWZvbnQtZmFtaWx5OiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBtc28taGFu c2ktZm9udC1mYW1pbHk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTsiPiZuYnNwOyZuYnNwOzwv U1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5 OzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJl YXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij43KSAN CjwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9tYW4m IzM5OzsgRk9OVC1TSVpFOiAxMC41cHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNv LWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQi PmRlbHV4ZSANCmZhdCBzZXBhcmF0b3I8L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6 ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTogMTAuNXB0OyBtc28tc3BhY2Vy dW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1m b250LWtlcm5pbmc6IDEuMDAwMHB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBzdHlsZT0i TUFSR0lOOiAwcHQ7IG1zby1wYXJhLW1hcmdpbi1sZWZ0OiAwLjAwMDBnZCIgY2xhc3M9TXNvTm9y bWFsPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiDlrovkvZM7IEZPTlQtU0laRTogMTJwdDsg bXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdDsg bXNvLWJpZGktZm9udC1mYW1pbHk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IG1zby1hc2Np aS1mb250LWZhbWlseTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgbXNvLWhhbnNpLWZvbnQt ZmFtaWx5OiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7Ij4mbmJzcDsmbmJzcDs8L1NQQU4+PFNQ QU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQt U0laRTogMTJwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250 LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+OCkgDQo8L1NQQU4+ PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZP TlQtU0laRTogMTAuNXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0 LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij4zLWluIA0K cGVlbGVyPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBS b21hbiYjMzk7OyBGT05ULVNJWkU6IDEwLjVwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7 OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAw MDBwdCI+PG86cD48L286cD48L1NQQU4+PC9QPg0KPFAgc3R5bGU9Ik1BUkdJTjogMHB0OyBtc28t cGFyYS1tYXJnaW4tbGVmdDogMC4wMDAwZ2QiIGNsYXNzPU1zb05vcm1hbD48U1BBTiANCnN0eWxl PSJGT05ULUZBTUlMWTog5a6L5L2TOyBGT05ULVNJWkU6IDEycHQ7IG1zby1zcGFjZXJ1bjogJiMz OTt5ZXMmIzM5OzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQ7IG1zby1iaWRpLWZvbnQtZmFt aWx5OiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBtc28tYXNjaWktZm9udC1mYW1pbHk6ICYj Mzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IG1zby1oYW5zaS1mb250LWZhbWlseTogJiMzOTtUaW1l cyBOZXcgUm9tYW4mIzM5OyI+Jm5ic3A7Jm5ic3A7PC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQt RkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEycHQ7IG1zby1z cGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsg bXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPjkpIA0KPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZP TlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEwLjVwdDsg bXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L 5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+c21hbGwvYmlnIA0KY3JhZnQgc3RvcmFn ZSBib3g8L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJv bWFuJiMzOTs7IEZPTlQtU0laRTogMTAuNXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7 IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAw MHB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBzdHlsZT0iTUFSR0lOOiAwcHQiIGNsYXNz PU1zb05vcm1hbD48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9t YW4mIzM5OzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1z by1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0 Ij4uPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21h biYjMzk7OyBGT05ULVNJWkU6IDEycHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNv LWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQi PjxvOnA+PC9vOnA+PC9TUEFOPjwvUD4NCjxQIHN0eWxlPSJNQVJHSU46IDBwdCIgY2xhc3M9TXNv Tm9ybWFsPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYj Mzk7OyBGT05ULVNJWkU6IDEycHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZh cmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPlBs PC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYj Mzk7OyBGT05ULVNJWkU6IDEycHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZh cmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPmVh c2U8L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFu JiMzOTs7IEZPTlQtU0laRTogMTJwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28t ZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+ Jm5ic3A7ZmVlbCANCmZyZWUgdG8gY29udGFjdCB3aXRoIG1lIGlmIHlvdSB3b3VsZCBsaWtlIHRv IGtub3cgbW9yZSAhIDwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1l cyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVz JiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6 IDEuMDAwMHB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBzdHlsZT0iTUFSR0lOOiAwcHQi IGNsYXNzPU1zb05vcm1hbD48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBO ZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMz OTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEu MDAwMHB0Ij5CLndpc2hlczwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtU aW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46ICYjMzk7 eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5p bmc6IDEuMDAwMHB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBzdHlsZT0iTUFSR0lOOiAw cHQiIGNsYXNzPU1zb05vcm1hbD48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1l cyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVz JiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6 IDEuMDAwMHB0Ij48bzpwPiZuYnNwOzwvbzpwPjwvU1BBTj48L1A+DQo8UCBzdHlsZT0iTUFSR0lO OiAwcHQiIGNsYXNzPU1zb05vcm1hbD48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtU aW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMnB0OyBtc28tc3BhY2VydW46ICYjMzk7 eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5p bmc6IDEuMDAwMHB0Ij5RdWVlbmllPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAm IzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEycHQ7IG1zby1zcGFjZXJ1bjog JiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQt a2VybmluZzogMS4wMDAwcHQiPjxvOnA+PC9vOnA+PC9TUEFOPjwvUD4NCjxQIHN0eWxlPSJNQVJH SU46IDBwdCIgY2xhc3M9TXNvTm9ybWFsPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5 O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEwLjVwdDsgbXNvLXNwYWNlcnVuOiAm IzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1r ZXJuaW5nOiAxLjAwMDBwdCI+WXV5YW8gDQpPdXRhaSBFbGVjdHJpY2FsIGNvLjwvU1BBTj48U1BB TiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1T SVpFOiAxMC41cHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9u dC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPkNPLiwgDQpMVEQ8 L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMz OTs7IEZPTlQtU0laRTogMTAuNXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1m YXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij48 bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBzdHlsZT0iTUFSR0lOOiAwcHQiIGNsYXNzPU1zb05v cm1hbD48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMzOTtUaW1lcyBOZXcgUm9tYW4mIzM5 OzsgRk9OVC1TSVpFOiAxMC41cHQ7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZh cmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPkFk ZHJlc3M6PC9TUEFOPjxCPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5l dyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEwLjVwdDsgRk9OVC1XRUlHSFQ6IGJvbGQ7IG1zby1z cGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsg bXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPk5PLjwvU1BBTj48L0I+PEI+PFNQQU4gDQpzdHls ZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTogMTAu NXB0OyBGT05ULVdFSUdIVDogYm9sZDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28t ZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+ NjA8L1NQQU4+PC9CPjxCPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5l dyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEwLjVwdDsgRk9OVC1XRUlHSFQ6IGJvbGQ7IG1zby1z cGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsg bXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPiZuYnNwOzwvU1BBTj48L0I+PEI+PFNQQU4gDQpz dHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTog MTAuNXB0OyBGT05ULVdFSUdIVDogYm9sZDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBt c28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBw dCI+SmluZmVuZzwvU1BBTj48L0I+PEI+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7 VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTogMTAuNXB0OyBGT05ULVdFSUdIVDogYm9s ZDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog 5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+Jm5ic3A7Um9hZCxZdXlhbyxaaGVq aWFuZyxDTiANCjMxNTQwMDwvU1BBTj48L0I+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYj Mzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTogMTAuNXB0OyBtc28tc3BhY2VydW46 ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250 LWtlcm5pbmc6IDEuMDAwMHB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBzdHlsZT0iTUFS R0lOOiAwcHQiIGNsYXNzPU1zb05vcm1hbD48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogJiMz OTtUaW1lcyBOZXcgUm9tYW4mIzM5OzsgRk9OVC1TSVpFOiAxMC41cHQ7IG1zby1zcGFjZXJ1bjog JiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQt a2VybmluZzogMS4wMDAwcHQiPlRlbDo8L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6 ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTogMTAuNXB0OyBtc28tc3BhY2Vy dW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1m b250LWtlcm5pbmc6IDEuMDAwMHB0Ij4wNTc0LTYyNjQyOTg5PC9TUEFOPjxTUEFOIA0Kc3R5bGU9 IkZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJWkU6IDEwLjVw dDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog 5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+PG86cD48L286cD48L1NQQU4+PC9Q Pg0KPFAgc3R5bGU9Ik1BUkdJTjogMHB0IiBjbGFzcz1Nc29Ob3JtYWw+PFNQQU4gDQpzdHlsZT0i Rk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0laRTogMTAuNXB0 OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDl rovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij5FbWFpbDogDQo8L1NQQU4+PFNQQU4g DQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0la RTogMTAuNXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQt ZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij48QSANCmhyZWY9Im1h aWx0bzoyNDM1MTI1MDE3QHFxLmNvbSI+MjQzNTEyNTAxN0BxcS5jb208L0E+PC9TUEFOPjxTUEFO IA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7OyBGT05ULVNJ WkU6IDEwLjVwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250 LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+PG86cD48L286cD48 L1NQQU4+PC9QPg0KPFAgc3R5bGU9Ik1BUkdJTjogMHB0IiBjbGFzcz1Nc29Ob3JtYWw+PFNQQU4g DQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZPTlQtU0la RTogMTAuNXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQt ZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij5za3lwZTo8L1NQQU4+ PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTs7IEZP TlQtU0laRTogMTAuNXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0 LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij48bzpwPjwv bzpwPjwvU1BBTj48L1A+PCEtLUVuZEZyYWdtZW50LS0+PC9CT0RZPjwvSFRNTD4NCg0K From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:24:03 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 14F8A7CB8 for ; Mon, 1 Aug 2016 01:24:03 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8ABEFAC001 for ; Sun, 31 Jul 2016 23:23:59 -0700 (PDT) X-ASG-Debug-ID: 1470032637-0bf8157e6b31cc10001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id CIAPzCdJpGLBjxid (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:23:57 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6dn-0000GG-Sf; Mon, 01 Aug 2016 06:23:55 +0000 Date: Sun, 31 Jul 2016 23:23:55 -0700 From: Christoph Hellwig To: Felix Janda Cc: xfs@oss.sgi.com Subject: Re: [PATCH xfsprogs 1/2] Remove workaround for getsubopt() on X-ASG-Orig-Subj: Re: [PATCH xfsprogs 1/2] Remove workaround for getsubopt() on MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160730133725.GA5895@nyan> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032637 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 326 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Sat, Jul 30, 2016 at 03:37:25PM +0200, Felix Janda wrote: > The workaround addressed only a const-correctness warning. > It was wrongly applied also to alternative c libraries on linux. > > Signed-off-by: Felix Janda Didn't I ACK this before? Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:24:52 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 6C6A77CBD for ; Mon, 1 Aug 2016 01:24:52 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id D6823AC002 for ; Sun, 31 Jul 2016 23:24:51 -0700 (PDT) X-ASG-Debug-ID: 1470032689-0bf57b369e2c5f30001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id PAqrAYPhH29feObL (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:24:50 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6ef-0000Pq-1D; Mon, 01 Aug 2016 06:24:49 +0000 Date: Sun, 31 Jul 2016 23:24:49 -0700 From: Christoph Hellwig To: Felix Janda Cc: xfs@oss.sgi.com Subject: Re: [PATCH xfsprogs 2/2] linux.h: Define xfs_off_t as int64_t Message-ID: <20160801062449.GB596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH xfsprogs 2/2] linux.h: Define xfs_off_t as int64_t References: <20160730133737.GB5895@nyan> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160730133737.GB5895@nyan> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032689 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 516 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Sat, Jul 30, 2016 at 03:37:37PM +0200, Felix Janda wrote: > int64_t is guaranteed to have the correct size and signedness and is > always avaible because linux.h has a include. > > Fixes compilation error "unkown type name 'off64_t'" on linux when the > public header is included without _LARGEFILE64_SOURCE or > _GNU_SOURCE defined. This bug was introduced in commit > cb898f157f8410a03cf5f3400baa1df9e5eecd33. I would much prefer to just define _LARGEFILE64_SOURCE in linux.h.. From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:25:14 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 765F07CBD for ; Mon, 1 Aug 2016 01:25:14 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id ED543AC004 for ; Sun, 31 Jul 2016 23:25:13 -0700 (PDT) X-ASG-Debug-ID: 1470032712-0bf8157e6b31cea0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id CoMWHuxVjQXk55wH (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:25:12 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6ez-0001TT-4t; Mon, 01 Aug 2016 06:25:09 +0000 Date: Sun, 31 Jul 2016 23:25:09 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 01/17] xfs/26[34]: remove duplicate tests Message-ID: <20160801062509.GC596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 01/17] xfs/26[34]: remove duplicate tests References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914478187.11762.1309628175021637188.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914478187.11762.1309628175021637188.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032712 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 367 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:46:21PM -0700, Darrick J. Wong wrote: > These two tests were accidentally double-added as xfs/30[78], but the > newer versions have fixed up helper usage and fewer whitespace > problems, so nuke the old tests. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:25:35 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 CBCC87CCC for ; Mon, 1 Aug 2016 01: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 9E8C98F8033 for ; Sun, 31 Jul 2016 23:25:32 -0700 (PDT) X-ASG-Debug-ID: 1470032730-0bf57b369c2c6050001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id 5ur8AqWzv1gbjb6Z (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:25:31 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6fI-0001fZ-Jr; Mon, 01 Aug 2016 06:25:28 +0000 Date: Sun, 31 Jul 2016 23:25:28 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 02/17] xfs: use rmapbt-checking helper Message-ID: <20160801062528.GD596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 02/17] xfs: use rmapbt-checking helper References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914478956.11762.1523179302392973799.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914478956.11762.1523179302392973799.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032731 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 263 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:46:29PM -0700, Darrick J. Wong wrote: > Don't open-code _notrun checks for the rmapbt, just use the helper. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:25:51 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 EE05E7CC7 for ; Mon, 1 Aug 2016 01:25:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 74724AC001 for ; Sun, 31 Jul 2016 23:25:50 -0700 (PDT) X-ASG-Debug-ID: 1470032749-0bf8157e6d31cf80001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id 1sbrUKUAhbVSSICe (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:25:49 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6fb-0001ii-05; Mon, 01 Aug 2016 06:25:47 +0000 Date: Sun, 31 Jul 2016 23:25:46 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 03/17] xfs/310: fix the size calculation for the huge device Message-ID: <20160801062546.GE596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 03/17] xfs/310: fix the size calculation for the huge device References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914479586.11762.2725828627113169692.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914479586.11762.2725828627113169692.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032749 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 380 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:46:35PM -0700, Darrick J. Wong wrote: > Fix the calculation of the dmhuge size. The previous calculation > tried to calculate the size correctly, but got it wrong for 1k > block sizes. Therefore, clean the whole mess up. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:26:15 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 0D8047CCB for ; Mon, 1 Aug 2016 01:26:15 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id D35EF304039 for ; Sun, 31 Jul 2016 23:26:11 -0700 (PDT) X-ASG-Debug-ID: 1470032769-0bf57c136a26d690001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id WUupCFf2JWTAsAgu (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:26:10 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6fv-0001vG-P6; Mon, 01 Aug 2016 06:26:07 +0000 Date: Sun, 31 Jul 2016 23:26:07 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 04/17] xfs/122: list the new log redo items Message-ID: <20160801062607.GF596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 04/17] xfs/122: list the new log redo items References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914480214.11762.17421079802696784668.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914480214.11762.17421079802696784668.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032770 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 257 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:46:42PM -0700, Darrick J. Wong wrote: > List the new log redo items. These should have stable sizes. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:26:29 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 D2FD87CCF for ; Mon, 1 Aug 2016 01:26:29 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 560E6AC001 for ; Sun, 31 Jul 2016 23:26:29 -0700 (PDT) X-ASG-Debug-ID: 1470032786-0bf57b369c2c61a0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id k9ZhFQClQ4U82fr2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:26:27 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6gD-0001x8-A3; Mon, 01 Aug 2016 06:26:25 +0000 Date: Sun, 31 Jul 2016 23:26:25 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 05/17] common/reflink: actually test dedupe on scratch device Message-ID: <20160801062625.GG596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 05/17] common/reflink: actually test dedupe on scratch device References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914480842.11762.9490852645886489605.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914480842.11762.9490852645886489605.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032787 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 265 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:46:48PM -0700, Darrick J. Wong wrote: > In _require_scratch_dedupe, test the scratch device, not the testdev. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:27:23 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 3DA0B7CCA for ; Mon, 1 Aug 2016 01:27:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 01FE4304039 for ; Sun, 31 Jul 2016 23:27:23 -0700 (PDT) X-ASG-Debug-ID: 1470032840-0bf57b369c2c6360001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id LM6zxFZ3rrMdiU33 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:27:21 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6h5-00022z-6w; Mon, 01 Aug 2016 06:27:19 +0000 Date: Sun, 31 Jul 2016 23:27:19 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 06/17] xfs: run xfs_repair at the end of each test Message-ID: <20160801062719.GH596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 06/17] xfs: run xfs_repair at the end of each test References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914481474.11762.2741429828012981240.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914481474.11762.2741429828012981240.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032841 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 322 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:46:54PM -0700, Darrick J. Wong wrote: > Run xfs_repair twice at the end of each test -- once to rebuild > the btree indices, and again with -n to check the rebuild work. This looks fine to me in general, but shouldn't we have specific tests that test the rebuilding in a normal auto run? From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:27:43 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 4001C7CD0 for ; Mon, 1 Aug 2016 01:27:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 12AB98F8033 for ; Sun, 31 Jul 2016 23:27:43 -0700 (PDT) X-ASG-Debug-ID: 1470032860-0bf57c136726d860001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id T6hHV1G0mouMDrbt (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:27:41 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6hP-00024t-61; Mon, 01 Aug 2016 06:27:39 +0000 Date: Sun, 31 Jul 2016 23:27:39 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 07/17] xfs/128: cycle_mount the scratch device, not the test device Message-ID: <20160801062739.GI596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 07/17] xfs/128: cycle_mount the scratch device, not the test device References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914482100.11762.3197784490090678443.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914482100.11762.3197784490090678443.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032861 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 323 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:47:01PM -0700, Darrick J. Wong wrote: > This test uses the scratch device, so cycle that, not the test dev. > This is also a xfs_fsr test, so put it in the fsr group. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:27:59 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 18E267CD3 for ; Mon, 1 Aug 2016 01:27:59 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C2CB5304039 for ; Sun, 31 Jul 2016 23:27:58 -0700 (PDT) X-ASG-Debug-ID: 1470032877-0bf8157e6c31d290001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id 8rauqrQoBNfyGLQf (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:27:57 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6hf-000265-5S; Mon, 01 Aug 2016 06:27:55 +0000 Date: Sun, 31 Jul 2016 23:27:55 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 08/17] xfs/129: fix post-metadump remounting idiocy Message-ID: <20160801062755.GJ596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 08/17] xfs/129: fix post-metadump remounting idiocy References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914482728.11762.13650586482755819412.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914482728.11762.13650586482755819412.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032877 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 390 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:47:07PM -0700, Darrick J. Wong wrote: > Use the standard _scratch_mount to mount the filesystem from the restored > image, instead of trying to call mount directly. This is needed in case > we had custom mount options (like rtdev). > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:28:39 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 CF34A7CD4 for ; Mon, 1 Aug 2016 01:28:39 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9378A8F8033 for ; Sun, 31 Jul 2016 23:28:39 -0700 (PDT) X-ASG-Debug-ID: 1470032918-0bf8157e6c31d3a0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id y2cBCEfCHLjdmuDR (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:28:38 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6iK-0002F2-94; Mon, 01 Aug 2016 06:28:36 +0000 Date: Sun, 31 Jul 2016 23:28:36 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 09/17] common/dmerror: fix mount option issues Message-ID: <20160801062836.GK596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 09/17] common/dmerror: fix mount option issues References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914483353.11762.14647880235199676753.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914483353.11762.14647880235199676753.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032918 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 438 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:47:13PM -0700, Darrick J. Wong wrote: > Calling _mount doesn't work when we want to add mount options > such as realtime devices. Since it's just a normal scratch device > mount except for the source device, just call _scratch_mount with > SCRATCH_DEV set to the dmerror device. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:28:54 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 EA2E47CDD for ; Mon, 1 Aug 2016 01:28:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id ADC648F8035 for ; Sun, 31 Jul 2016 23:28:54 -0700 (PDT) X-ASG-Debug-ID: 1470032932-0bf8157e6b31d3e0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id DA4Ml7gUS3cbnftW (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:28:53 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6iZ-0002Gs-F8; Mon, 01 Aug 2016 06:28:51 +0000 Date: Sun, 31 Jul 2016 23:28:51 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 10/17] xfs/179: use scratch device helpers Message-ID: <20160801062851.GL596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 10/17] xfs/179: use scratch device helpers References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914483981.11762.15707981777571396710.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914483981.11762.15707981777571396710.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032933 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 318 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:47:19PM -0700, Darrick J. Wong wrote: > Use the helper functions for scratch devices. This fixes a problem > where xfs/179 fails when there's a realtime device. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:29:08 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 639F87CDD for ; Mon, 1 Aug 2016 01:29:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3522B304048 for ; Sun, 31 Jul 2016 23:29:08 -0700 (PDT) X-ASG-Debug-ID: 1470032945-0bf57c136826d9e0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id Q3EDZLs8DkL0TnG2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:29:06 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6im-0002I6-6d; Mon, 01 Aug 2016 06:29:04 +0000 Date: Sun, 31 Jul 2016 23:29:04 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 11/17] xfs/234: use scratch device helpers Message-ID: <20160801062904.GM596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 11/17] xfs/234: use scratch device helpers References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914484608.11762.11733588115406137276.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914484608.11762.11733588115406137276.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032946 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 318 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:47:26PM -0700, Darrick J. Wong wrote: > Use the helper functions for scratch devices. This fixes a problem > where xfs/234 fails when there's a realtime device. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:29:36 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 836F77CDA for ; Mon, 1 Aug 2016 01:29:36 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 04D7AAC002 for ; Sun, 31 Jul 2016 23:29:35 -0700 (PDT) X-ASG-Debug-ID: 1470032973-0bf57c136726da40001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id BjiXqIhvN8RkiFRk (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:29:34 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6jE-0002KG-Ck; Mon, 01 Aug 2016 06:29:32 +0000 Date: Sun, 31 Jul 2016 23:29:32 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 12/17] reflink: test cross-mountpoint reflink and dedupe Message-ID: <20160801062932.GN596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 12/17] reflink: test cross-mountpoint reflink and dedupe References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914485237.11762.2526971565060691741.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914485237.11762.2526971565060691741.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470032974 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 373 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:47:32PM -0700, Darrick J. Wong wrote: > Test sharing blocks via reflink and dedupe between two different > mountpoints of the same filesystem. This shouldn't work, since > we don't allow cross-mountpoint functions. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:30:08 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 0A8477CE0 for ; Mon, 1 Aug 2016 01:30:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id B0C54304062 for ; Sun, 31 Jul 2016 23:30:07 -0700 (PDT) X-ASG-Debug-ID: 1470033006-0bf8157e6c31d5b0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id KKH6FX1HEtVZa0ad (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:30:06 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6jk-0002rU-OL; Mon, 01 Aug 2016 06:30:04 +0000 Date: Sun, 31 Jul 2016 23:30:04 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 16/17] xfs/122: add the realtime rmapbt inode and btree fields Message-ID: <20160801063004.GO596@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 16/17] xfs/122: add the realtime rmapbt inode and btree fields References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914488084.11762.2546324713817812928.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146914488084.11762.2546324713817812928.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470033006 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 252 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 21, 2016 at 04:48:00PM -0700, Darrick J. Wong wrote: > Add the on-disk structures added by the realtime rmapbt. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:31:34 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 9FBFB7CDC for ; Mon, 1 Aug 2016 01:31:34 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 637B88F8035 for ; Sun, 31 Jul 2016 23:31:34 -0700 (PDT) X-ASG-Debug-ID: 1470033091-0bf57c136a26dbc0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id BmQo3AnL3NIbKUCY (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:31:32 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6l6-0004dy-9r; Mon, 01 Aug 2016 06:31:28 +0000 Date: Sun, 31 Jul 2016 23:31:28 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: Al Viro , linux-api@vger.kernel.org, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, "Kirill A. Shutemov" , Vlastimil Babka Subject: Re: [PATCH] vfs: cap dedupe request structure size at PAGE_SIZE Message-ID: <20160801063128.GA15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] vfs: cap dedupe request structure size at PAGE_SIZE References: <20160728183534.GB15753@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160728183534.GB15753@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470033092 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 958 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 28, 2016 at 11:35:34AM -0700, Darrick J. Wong wrote: > Kirill A. Shutemov reports that the kernel doesn't try to cap dest_count > in any way, and uses the number to allocate kernel memory. This causes > high order allocation warnings in the kernel log if someone passes in a > big enough value. We should clamp the allocation at PAGE_SIZE to avoid > stressing the VM. > > The two existing users of the dedupe ioctl never send more than 120 > requests, so we can safely clamp dest_range at PAGE_SIZE, because with > 4k pages we can handle up to 127 dedupe candidates. Given the max > extent length of 16MB, we can end up doing 2GB of IO which is plenty. Looks fine, Reviewed-by: Christoph Hellwig > @@ -582,6 +582,10 @@ static int ioctl_file_dedupe_range(struct file *file, void __user *arg) This function returns long in mainline. Maybe you should resend your return type fix to Al while you're at it? From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:32:10 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 D117D7CE3 for ; Mon, 1 Aug 2016 01:32:10 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 941608F8033 for ; Sun, 31 Jul 2016 23:32:10 -0700 (PDT) X-ASG-Debug-ID: 1470033128-0bf57c136726dc30001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id yqNMN5dYEnZrvKdw (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:32:09 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6lk-0004jL-3Y; Mon, 01 Aug 2016 06:32:08 +0000 Date: Sun, 31 Jul 2016 23:32:08 -0700 From: Christoph Hellwig To: David Binderman Cc: david@fromorbit.com, xfs@oss.sgi.com, Linux Kernel Mailing List , dcb314@hotmail.com Subject: Re: xfs_icache.c:1298]: (style) Redundant condition Message-ID: <20160801063208.GB15590@infradead.org> X-ASG-Orig-Subj: Re: xfs_icache.c:1298]: (style) Redundant condition References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470033129 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 527 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Mon, Jul 25, 2016 at 04:13:28PM +0100, David Binderman wrote: > Hello there, > > linux-4.7/fs/xfs/xfs_icache.c:1298]: (style) Redundant condition: > eofb. '!eofb || (eofb && eofb.eof_scan_owner!=0)' is equivalent to > '!eofb || eofb.eof_scan_owner!=0' > > Source code is > > ASSERT(!eofb || (eofb && eofb->eof_scan_owner != 0)); > > Maybe better code > > ASSERT(!eofb || (eofb->eof_scan_owner != 0)); Yes, that would be better. But it's probably not worth changing existing code just for that. From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:33:31 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 C4B7E7CE0 for ; Mon, 1 Aug 2016 01:33:31 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 966298F8033 for ; Sun, 31 Jul 2016 23:33:31 -0700 (PDT) X-ASG-Debug-ID: 1470033209-0bf57b369e2c6d90001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id mmAuwqCxfYHYfdnB (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:33:30 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6mw-0004pJ-Br; Mon, 01 Aug 2016 06:33:22 +0000 Date: Sun, 31 Jul 2016 23:33:22 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 01/47] vfs: fix return type of ioctl_file_dedupe_range Message-ID: <20160801063322.GC15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 01/47] vfs: fix return type of ioctl_file_dedupe_range References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907696757.25461.13451944377009612990.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907696757.25461.13451944377009612990.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470033209 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 424 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, Jul 20, 2016 at 09:56:07PM -0700, Darrick J. Wong wrote: > All the VFS functions in the dedupe ioctl path return int status, so > the ioctl handler ought to as well. > > Found by Coverity, CID 1350952. > > Signed-off-by: Darrick J. Wong Nothing to do with rmap, or XFS for that matter. Please send it directly to Al. Otherwise: Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:33:59 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 D41637CE0 for ; Mon, 1 Aug 2016 01:33:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id A5B0E8F8033 for ; Sun, 31 Jul 2016 23:33:59 -0700 (PDT) X-ASG-Debug-ID: 1470033237-0bf57b369b2c6df0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id Zmnp3HFcrA1kyn0W (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:33:58 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6nT-0004r1-RN; Mon, 01 Aug 2016 06:33:55 +0000 Date: Sun, 31 Jul 2016 23:33:55 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 02/47] vfs: support FS_XFLAG_REFLINK and FS_XFLAG_COWEXTSIZE Message-ID: <20160801063355.GD15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 02/47] vfs: support FS_XFLAG_REFLINK and FS_XFLAG_COWEXTSIZE References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907697404.25461.4210564656872865210.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907697404.25461.4210564656872865210.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470033237 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 313 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, Jul 20, 2016 at 09:56:14PM -0700, Darrick J. Wong wrote: > Introduce XFLAGs for the new XFS reflink inode flag and the CoW extent > size hint, and actually plumb the CoW extent size hint into the fsxattr > structure. This has nothing to do with rmap support, please move it to the reflink series. From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:34:22 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 781F37CE0 for ; Mon, 1 Aug 2016 01:34:22 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4A97A304048 for ; Sun, 31 Jul 2016 23:34:22 -0700 (PDT) X-ASG-Debug-ID: 1470033259-0bf57b369d2c6e70001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id Egapr0xkctEznKwZ (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:34:20 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6nq-0004rw-9t; Mon, 01 Aug 2016 06:34:18 +0000 Date: Sun, 31 Jul 2016 23:34:18 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 03/47] xfs: fix attr shortform structure alignment on cris Message-ID: <20160801063418.GE15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 03/47] xfs: fix attr shortform structure alignment on cris References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907698036.25461.13007151908183013504.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907698036.25461.13007151908183013504.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470033260 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 438 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, Jul 20, 2016 at 09:56:20PM -0700, Darrick J. Wong wrote: > Apparently cris doesn't require structure stride to align with the > largest type in the struct, so list[0] isn't at offset 4 like it is > everywhere else. Fix this... insofar as existing XFSes on cris are > screwed. > > Signed-off-by: Darrick J. Wong Looks fine and should go in ASAP: Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:35:01 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 92DFD7CE0 for ; Mon, 1 Aug 2016 01:35:01 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 07364AC001 for ; Sun, 31 Jul 2016 23:35:00 -0700 (PDT) X-ASG-Debug-ID: 1470033298-0bf57b369c2c6f20001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id pe8lgbeA2kicO5vd (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:34:58 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6oR-0004uo-89; Mon, 01 Aug 2016 06:34:55 +0000 Date: Sun, 31 Jul 2016 23:34:55 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 04/47] xfs: fix locking of the rt bitmap/summary inodes Message-ID: <20160801063455.GF15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 04/47] xfs: fix locking of the rt bitmap/summary inodes References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907698690.25461.7316591529865921141.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907698690.25461.7316591529865921141.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470033298 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 478 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, Jul 20, 2016 at 09:56:26PM -0700, Darrick J. Wong wrote: > When we're deleting realtime extents, we need to lock the summary > inode in case we need to update the summary info to prevent an assert > on the rsumip inode lock on a debug kernel. While we're at it, fix > the locking annotations so that we avoid triggering lockdep warnings. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:35:48 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 17F217CE0 for ; Mon, 1 Aug 2016 01:35:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9134FAC002 for ; Sun, 31 Jul 2016 23:35:47 -0700 (PDT) X-ASG-Debug-ID: 1470033346-0bf8157e6d31dc10001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id dCUH0NDbuoAC9tit (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:35:46 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6pC-00069Y-Ve; Mon, 01 Aug 2016 06:35:42 +0000 Date: Sun, 31 Jul 2016 23:35:42 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 05/47] xfs: set *stat=1 after iroot realloc Message-ID: <20160801063542.GG15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 05/47] xfs: set *stat=1 after iroot realloc References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907699326.25461.8018421055879226973.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907699326.25461.8018421055879226973.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470033346 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 354 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, Jul 20, 2016 at 09:56:33PM -0700, Darrick J. Wong wrote: > If we make the inode root block of a btree unfull by expanding the > root, we must set *stat to 1 to signal success, rather than leaving > it uninitialized. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:37:18 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 290DF7CE0 for ; Mon, 1 Aug 2016 01:37:18 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id EF563304051 for ; Sun, 31 Jul 2016 23:37:17 -0700 (PDT) X-ASG-Debug-ID: 1470033435-0bf57c136726e030001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id S1VvBDNy56jHo4X6 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:37:16 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6qc-0006Gz-Ik; Mon, 01 Aug 2016 06:37:10 +0000 Date: Sun, 31 Jul 2016 23:37:10 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 06/47] xfs: during btree split, save new block key & ptr for future insertion Message-ID: <20160801063710.GH15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 06/47] xfs: during btree split, save new block key & ptr for future insertion References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907699965.25461.15978861148226786001.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907699965.25461.15978861148226786001.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470033436 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 54 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS Nice! Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:39:07 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 78F387CED for ; Mon, 1 Aug 2016 01:39:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 49101304048 for ; Sun, 31 Jul 2016 23:39:07 -0700 (PDT) X-ASG-Debug-ID: 1470033545-0bf57b369b2c7310001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id zp7oQzQhguJFhMqQ (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:39:05 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU6sQ-0006NP-Lm; Mon, 01 Aug 2016 06:39:02 +0000 Date: Sun, 31 Jul 2016 23:39:02 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 07/47] xfs: add function pointers for get/update keys to the btree Message-ID: <20160801063902.GI15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 07/47] xfs: add function pointers for get/update keys to the btree References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907700604.25461.2181974283557088355.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907700604.25461.2181974283557088355.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470033545 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 583 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, Jul 20, 2016 at 09:56:46PM -0700, Darrick J. Wong wrote: > Add some function pointers to bc_ops to get the btree keys for > leaf and node blocks, and to update parent keys of a block. > Convert the _btree_updkey calls to use our new pointer, and > modify the tree shape changing code to call the appropriate > get_*_keys pointer instead of _btree_copy_keys because the > overlapping btree has to calculate high key values. I don't really like to add ops for something that isn't really per-btree type. Can you just add an overlapping flag and act based on that? From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:48:23 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 A409B7CF1 for ; Mon, 1 Aug 2016 01:48:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 74237304048 for ; Sun, 31 Jul 2016 23:48:23 -0700 (PDT) X-ASG-Debug-ID: 1470034100-0bf57c136726e5c0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id GeJhXfplBRPQmCDe (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:48:21 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU71O-00026n-78; Mon, 01 Aug 2016 06:48:18 +0000 Date: Sun, 31 Jul 2016 23:48:18 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 08/47] xfs: support btrees with overlapping intervals for keys Message-ID: <20160801064818.GJ15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 08/47] xfs: support btrees with overlapping intervals for keys References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907701258.25461.18255100969448497359.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907701258.25461.18255100969448497359.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470034101 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 3192 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS > v2: When we're deleting a record in a btree that supports overlapped > interval records and the deletion results in two btree blocks being > joined, we defer updating the high/low keys until after all possible > joining (at higher levels in the tree) have finished. At this point, > the btree pointers at all levels have been updated to remove the empty > blocks and we can update the low and high keys. > > When we're doing this, we must be careful to update the keys of all > node pointers up to the root instead of stopping at the first set of > keys that don't need updating. This is because it's possible for a > single deletion to cause joining of multiple levels of tree, and so > we need to update everything going back to the root. > > v3: Make diff_two_keys return < 0, 0, or > 0 if key1 is less than, > equal to, or greater than key2, respectively. This is consistent > with the rest of the kernel and the C library. Clarify some comments > and refactor the sibling_update function out of existence. Check the > return value of btree_updkeys(). The changelogs go below the "-- " marker so that they don't appear in the git log. That is unless they actually are useful like this one and should be merged into the actual patch description instead of being worded incrementally. > +++ b/fs/xfs/libxfs/xfs_btree.c > @@ -51,7 +51,6 @@ static const __uint32_t xfs_magics[2][XFS_BTNUM_MAX] = { > #define xfs_btree_magic(cur) \ > xfs_magics[!!((cur)->bc_flags & XFS_BTREE_CRC_BLOCKS)][cur->bc_btnum] > > - > STATIC int /* error (0 or EFSCORRUPTED) */ > xfs_btree_check_lblock( > struct xfs_btree_cur *cur, /* btree cursor */ Random whitespace change that probably shouldn't be in the patch. > @@ -428,6 +427,50 @@ xfs_btree_dup_cursor( > * into a btree block (xfs_btree_*_offset) or return a pointer to the given > * record, key or pointer (xfs_btree_*_addr). Note that all addressing > * inside the btree block is done using indices starting at one, not zero! > + * > + * If XFS_BTREE_OVERLAPPING is set, then this btree supports keys containing And here we already have the flag I asked for in the last patch. I think that should be enough to drop the new methods. > +/* > + * In-core key that holds both low and high keys for overlapped btrees. > + * The two keys are packed next to each other on disk, so do the same > + * in memory. Preserve the existing xfs_btree_key as a single key to > + * avoid the mental model breakage that would happen if we passed a > + * bigkey into a function that operates on a single key. > + */ > +union xfs_btree_bigkey { > + struct xfs_bmbt_key bmbt; > + xfs_bmdr_key_t bmbr; /* bmbt root block */ > + xfs_alloc_key_t alloc; > + struct xfs_inobt_key inobt; > +}; I don't understand the purpose of this union at all, and the comment seems misleading. Compared to union xfs_btree_key the only difference seems to be that xfs_btree_bigkey is missing the 'struct xfs_rmap_key rmap' member. How does that enable us to holds low and high keys? Also every single user seems to cast it to xfs_btree_key which is a little odd and smells unsafe. From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 01:50:40 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 D326D7CF1 for ; Mon, 1 Aug 2016 01:50:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id A3FCF304051 for ; Sun, 31 Jul 2016 23:50:40 -0700 (PDT) X-ASG-Debug-ID: 1470034238-0bf57c136926e6a0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id zMrBsUxGGlSnQkrO (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 31 Jul 2016 23:50:38 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU73b-0003OM-Td; Mon, 01 Aug 2016 06:50:35 +0000 Date: Sun, 31 Jul 2016 23:50:35 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 10/47] xfs: refactor btree owner change into a separate visit-blocks function Message-ID: <20160801065035.GK15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 10/47] xfs: refactor btree owner change into a separate visit-blocks function References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907702579.25461.15346459038604068167.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907702579.25461.15346459038604068167.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470034238 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 443 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, Jul 20, 2016 at 09:57:05PM -0700, Darrick J. Wong wrote: > Refactor the btree_change_owner function into a more generic apparatus > which visits all blocks in a btree. We'll use this in a subsequent > patch for counting btree blocks for AG reservations. > > Signed-off-by: Darrick J. Wong > Reviewed-by: Brian Foster Looks fine, Reviewed-by: Christoph Hellwig From felix.janda@posteo.de Mon Aug 1 01:54:40 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 C924C7CF4 for ; Mon, 1 Aug 2016 01:54:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8B93E304051 for ; Sun, 31 Jul 2016 23:54:40 -0700 (PDT) X-ASG-Debug-ID: 1470034475-0bf57c136a26e890001-NocioJ Received: from mout02.posteo.de (mout02.posteo.de [185.67.36.66]) by cuda.sgi.com with ESMTP id fCQMXCWxNPQQwuaJ (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Sun, 31 Jul 2016 23:54:37 -0700 (PDT) X-Barracuda-Envelope-From: felix.janda@posteo.de X-Barracuda-Effective-Source-IP: mout02.posteo.de[185.67.36.66] X-Barracuda-Apparent-Source-IP: 185.67.36.66 Received: from submission (posteo.de [89.146.220.130]) by mout02.posteo.de (Postfix) with ESMTPS id 8F0F920900 for ; Mon, 1 Aug 2016 08:54:35 +0200 (CEST) Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 3s2qnk4gFJz105k; Mon, 1 Aug 2016 08:54:30 +0200 (CEST) Date: Mon, 1 Aug 2016 08:54:10 +0200 From: Felix Janda To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH xfsprogs 2/2] linux.h: Define xfs_off_t as int64_t Message-ID: <20160801065410.GA341@nyan> X-ASG-Orig-Subj: Re: [PATCH xfsprogs 2/2] linux.h: Define xfs_off_t as int64_t References: <20160730133737.GB5895@nyan> <20160801062449.GB596@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801062449.GB596@infradead.org> User-Agent: Mutt/1.6.1 (2016-04-27) X-Barracuda-Connect: mout02.posteo.de[185.67.36.66] X-Barracuda-Start-Time: 1470034476 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 713 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Christoph Hellwig wrote: > On Sat, Jul 30, 2016 at 03:37:37PM +0200, Felix Janda wrote: > > int64_t is guaranteed to have the correct size and signedness and is > > always avaible because linux.h has a include. > > > > Fixes compilation error "unkown type name 'off64_t'" on linux when the > > public header is included without _LARGEFILE64_SOURCE or > > _GNU_SOURCE defined. This bug was introduced in commit > > cb898f157f8410a03cf5f3400baa1df9e5eecd33. > > I would much prefer to just define _LARGEFILE64_SOURCE in linux.h.. Thanks for the suggestion, but that does not work if the system header defining (or not) off64_t is included before the xfs headers. --- Felix From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 02:08:51 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 7B9217CF7 for ; Mon, 1 Aug 2016 02:08:51 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 65006AC001 for ; Mon, 1 Aug 2016 00:08:47 -0700 (PDT) X-ASG-Debug-ID: 1470035323-0bf8157e6c31edc0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id L7KPJMpKOhRUVj4V (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Mon, 01 Aug 2016 00:08:43 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU7L6-0003Bx-DY; Mon, 01 Aug 2016 07:08:40 +0000 Date: Mon, 1 Aug 2016 00:08:40 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 11/47] xfs: move deferred operations into a separate file Message-ID: <20160801070840.GL15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 11/47] xfs: move deferred operations into a separate file References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907703710.25461.16650495404061662831.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907703710.25461.16650495404061662831.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470035323 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 975 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS > + * NOTE: To avoid exceeding the transaction reservation, we limit the > + * number of items that we attach to a given xfs_defer_pending. This seems like a new feature compared to the old bmap_free code, can you explain it it in a little more detail? As I'm trying to compare this code to the existing one there are a few things that confuse me, most importantly the purpose of the xfs_defer_pending structure, which seems like a new indirection. I don't really like that indirection at all, as it introduces another memory allocation deep down in the commit path where we can't recover from ENOMEM. Also there seems to be a 1:1 relationship between it and the xfs_bmap_free_item structure that got renamed to xfs_extent_free_item. > +static const struct xfs_defer_op_type *defer_op_types[XFS_DEFER_OPS_TYPE_MAX]; We shouldn't really need this global array and the xfs_defer_ops_type enum, just pass the xfs_defer_op_type pointer into xfs_defer_add. From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 02:09:07 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 365FB7CFB for ; Mon, 1 Aug 2016 02:09:07 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id DF74C30405F for ; Mon, 1 Aug 2016 00:09:06 -0700 (PDT) X-ASG-Debug-ID: 1470035345-0bf8157e6b31edf0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id E0g39DCjYc9Phr4y (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Mon, 01 Aug 2016 00:09:05 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU7LR-0003HX-FN; Mon, 01 Aug 2016 07:09:01 +0000 Date: Mon, 1 Aug 2016 00:09:01 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 13/47] xfs: clean up typedef usage in the EFI/EFD handling code Message-ID: <20160801070901.GM15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 13/47] xfs: clean up typedef usage in the EFI/EFD handling code References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907705011.25461.9159996141406923498.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907705011.25461.9159996141406923498.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470035345 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 60 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 02:12:42 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 61D907CF9 for ; Mon, 1 Aug 2016 02:12:42 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 310D3304051 for ; Mon, 1 Aug 2016 00:12:42 -0700 (PDT) X-ASG-Debug-ID: 1470035559-0bf57c136a26efa0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id 5WRQUvbxEXtZiLpI (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Mon, 01 Aug 2016 00:12:39 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU7Ov-0005HR-Cv; Mon, 01 Aug 2016 07:12:37 +0000 Date: Mon, 1 Aug 2016 00:12:37 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 38/47] xfs: create rmap update intent log items Message-ID: <20160801071237.GO15590@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 38/47] xfs: create rmap update intent log items References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907721624.25461.1280539951915485473.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907721624.25461.1280539951915485473.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470035559 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 9350 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, Jul 20, 2016 at 10:00:16PM -0700, Darrick J. Wong wrote: > Create rmap update intent/done log items to record redo information in > the log. Because we need to roll transactions between updating the > bmbt mapping and updating the reverse mapping, we also have to track > the status of the metadata updates that will be recorded in the > post-roll transactions, just in case we crash before committing the > final transaction. This mechanism enables log recovery to finish what > was already started. > > Signed-off-by: Darrick J. Wong > Reviewed-by: Brian Foster There is absolutely no need to log the extent array in the rmap update done item. We have always done this for the EFD, but if you look at it it's not actually needed there either. Something like the patch below (relative to your whole tree) will fix this up and reduce the amount of data logged: diff --git a/fs/xfs/libxfs/xfs_log_format.h b/fs/xfs/libxfs/xfs_log_format.h index a8d794d..a6eed43 100644 --- a/fs/xfs/libxfs/xfs_log_format.h +++ b/fs/xfs/libxfs/xfs_log_format.h @@ -658,9 +658,8 @@ struct xfs_rui_log_format { struct xfs_rud_log_format { __uint16_t rud_type; /* rud log item type */ __uint16_t rud_size; /* size of this item */ - __uint32_t rud_nextents; /* # of extents freed */ + __uint32_t __pad; __uint64_t rud_rui_id; /* id of corresponding rui */ - struct xfs_map_extent rud_extents[1]; /* array of extents rmapped */ }; /* diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index e51fd2b..e8638fd 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -3482,9 +3482,7 @@ xlog_recover_rud_pass2( struct xfs_ail *ailp = log->l_ailp; rud_formatp = item->ri_buf[0].i_addr; - ASSERT(item->ri_buf[0].i_len == (sizeof(struct xfs_rud_log_format) + - ((rud_formatp->rud_nextents - 1) * - sizeof(struct xfs_map_extent)))); + ASSERT(item->ri_buf[0].i_len == sizeof(struct xfs_rud_log_format)); rui_id = rud_formatp->rud_rui_id; /* diff --git a/fs/xfs/xfs_rmap_item.c b/fs/xfs/xfs_rmap_item.c index 6d6cc3b..7e47432 100644 --- a/fs/xfs/xfs_rmap_item.c +++ b/fs/xfs/xfs_rmap_item.c @@ -273,36 +273,13 @@ static inline struct xfs_rud_log_item *RUD_ITEM(struct xfs_log_item *lip) } STATIC void -xfs_rud_item_free(struct xfs_rud_log_item *rudp) -{ - if (rudp->rud_format.rud_nextents > XFS_RUD_MAX_FAST_EXTENTS) - kmem_free(rudp); - else - kmem_zone_free(xfs_rud_zone, rudp); -} - -/* - * This returns the number of iovecs needed to log the given rud item. - * We only need 1 iovec for an rud item. It just logs the rud_log_format - * structure. - */ -static inline int -xfs_rud_item_sizeof( - struct xfs_rud_log_item *rudp) -{ - return sizeof(struct xfs_rud_log_format) + - (rudp->rud_format.rud_nextents - 1) * - sizeof(struct xfs_map_extent); -} - -STATIC void xfs_rud_item_size( struct xfs_log_item *lip, int *nvecs, int *nbytes) { *nvecs += 1; - *nbytes += xfs_rud_item_sizeof(RUD_ITEM(lip)); + *nbytes += sizeof(struct xfs_rud_log_format); } /* @@ -320,13 +297,11 @@ xfs_rud_item_format( struct xfs_rud_log_item *rudp = RUD_ITEM(lip); struct xfs_log_iovec *vecp = NULL; - ASSERT(rudp->rud_next_extent == rudp->rud_format.rud_nextents); - rudp->rud_format.rud_type = XFS_LI_RUD; rudp->rud_format.rud_size = 1; xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_RUD_FORMAT, &rudp->rud_format, - xfs_rud_item_sizeof(rudp)); + sizeof(struct xfs_rud_log_format)); } /* @@ -374,7 +349,7 @@ xfs_rud_item_unlock( if (lip->li_flags & XFS_LI_ABORTED) { xfs_rui_release(rudp->rud_ruip); - xfs_rud_item_free(rudp); + kmem_zone_free(xfs_rud_zone, rudp); } } @@ -398,7 +373,7 @@ xfs_rud_item_committed( * aborted due to log I/O error). */ xfs_rui_release(rudp->rud_ruip); - xfs_rud_item_free(rudp); + kmem_zone_free(xfs_rud_zone, rudp); return (xfs_lsn_t)-1; } @@ -437,25 +412,14 @@ static const struct xfs_item_ops xfs_rud_item_ops = { struct xfs_rud_log_item * xfs_rud_init( struct xfs_mount *mp, - struct xfs_rui_log_item *ruip, - uint nextents) + struct xfs_rui_log_item *ruip) { struct xfs_rud_log_item *rudp; - uint size; - - ASSERT(nextents > 0); - if (nextents > XFS_RUD_MAX_FAST_EXTENTS) { - size = (uint)(sizeof(struct xfs_rud_log_item) + - ((nextents - 1) * sizeof(struct xfs_map_extent))); - rudp = kmem_zalloc(size, KM_SLEEP); - } else { - rudp = kmem_zone_zalloc(xfs_rud_zone, KM_SLEEP); - } + rudp = kmem_zone_zalloc(xfs_rud_zone, KM_SLEEP); xfs_log_item_init(mp, &rudp->rud_item, XFS_LI_RUD, &xfs_rud_item_ops); rudp->rud_ruip = ruip; - rudp->rud_format.rud_nextents = nextents; rudp->rud_format.rud_rui_id = ruip->rui_format.rui_id; return rudp; @@ -523,7 +487,7 @@ xfs_rui_recover( error = xfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate, 0, 0, 0, &tp); if (error) return error; - rudp = xfs_trans_get_rud(tp, ruip, ruip->rui_format.rui_nextents); + rudp = xfs_trans_get_rud(tp, ruip); for (i = 0; i < ruip->rui_format.rui_nextents; i++) { rmap = &(ruip->rui_format.rui_extents[i]); diff --git a/fs/xfs/xfs_rmap_item.h b/fs/xfs/xfs_rmap_item.h index 59ef3ec..aefcc3a 100644 --- a/fs/xfs/xfs_rmap_item.h +++ b/fs/xfs/xfs_rmap_item.h @@ -77,21 +77,15 @@ struct xfs_rui_log_item { struct xfs_rud_log_item { struct xfs_log_item rud_item; struct xfs_rui_log_item *rud_ruip; - uint rud_next_extent; struct xfs_rud_log_format rud_format; }; -/* - * Max number of extents in fast allocation path. - */ -#define XFS_RUD_MAX_FAST_EXTENTS 16 - extern struct kmem_zone *xfs_rui_zone; extern struct kmem_zone *xfs_rud_zone; struct xfs_rui_log_item *xfs_rui_init(struct xfs_mount *, uint); struct xfs_rud_log_item *xfs_rud_init(struct xfs_mount *, - struct xfs_rui_log_item *, uint); + struct xfs_rui_log_item *); int xfs_rui_copy_format(struct xfs_log_iovec *buf, struct xfs_rui_log_format *dst_rui_fmt); void xfs_rui_item_free(struct xfs_rui_log_item *); diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 45773df..24ef83e 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -1770,9 +1770,7 @@ xfs_init_zones(void) if (!xfs_icreate_zone) goto out_destroy_ili_zone; - xfs_rud_zone = kmem_zone_init((sizeof(struct xfs_rud_log_item) + - ((XFS_RUD_MAX_FAST_EXTENTS - 1) * - sizeof(struct xfs_map_extent))), + xfs_rud_zone = kmem_zone_init(sizeof(struct xfs_rud_log_item), "xfs_rud_item"); if (!xfs_rud_zone) goto out_destroy_icreate_zone; diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index bb4b84f..e2bf86a 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -241,7 +241,7 @@ enum xfs_rmap_intent_type; void xfs_rmap_update_init_defer_op(void); struct xfs_rud_log_item *xfs_trans_get_rud(struct xfs_trans *tp, - struct xfs_rui_log_item *ruip, uint nextents); + struct xfs_rui_log_item *ruip); int xfs_trans_log_finish_rmap_update(struct xfs_trans *tp, struct xfs_rud_log_item *rudp, enum xfs_rmap_intent_type type, __uint64_t owner, int whichfork, xfs_fileoff_t startoff, diff --git a/fs/xfs/xfs_trans_rmap.c b/fs/xfs/xfs_trans_rmap.c index 8341476..35650d6 100644 --- a/fs/xfs/xfs_trans_rmap.c +++ b/fs/xfs/xfs_trans_rmap.c @@ -129,29 +129,14 @@ xfs_trans_log_start_rmap_update( xfs_trans_set_rmap_flags(rmap, type, whichfork, state); } -/* - * This routine is called to allocate an "rmap update done" - * log item that will hold nextents worth of extents. The - * caller must use all nextents extents, because we are not - * flexible about this at all. - */ struct xfs_rud_log_item * xfs_trans_get_rud( struct xfs_trans *tp, - struct xfs_rui_log_item *ruip, - uint nextents) + struct xfs_rui_log_item *ruip) { struct xfs_rud_log_item *rudp; - ASSERT(tp != NULL); - ASSERT(nextents > 0); - - rudp = xfs_rud_init(tp->t_mountp, ruip, nextents); - ASSERT(rudp != NULL); - - /* - * Get a log_item_desc to point at the new item. - */ + rudp = xfs_rud_init(tp->t_mountp, ruip); xfs_trans_add_item(tp, &rudp->rud_item); return rudp; } @@ -174,8 +159,6 @@ xfs_trans_log_finish_rmap_update( xfs_exntst_t state, struct xfs_btree_cur **pcur) { - uint next_extent; - struct xfs_map_extent *rmap; int error; error = xfs_rmap_finish_one(tp, type, owner, whichfork, startoff, @@ -191,16 +174,6 @@ xfs_trans_log_finish_rmap_update( tp->t_flags |= XFS_TRANS_DIRTY; rudp->rud_item.li_desc->lid_flags |= XFS_LID_DIRTY; - next_extent = rudp->rud_next_extent; - ASSERT(next_extent < rudp->rud_format.rud_nextents); - rmap = &(rudp->rud_format.rud_extents[next_extent]); - rmap->me_owner = owner; - rmap->me_startblock = startblock; - rmap->me_startoff = startoff; - rmap->me_len = blockcount; - xfs_trans_set_rmap_flags(rmap, type, whichfork, state); - rudp->rud_next_extent++; - return error; } @@ -255,7 +228,7 @@ xfs_rmap_update_create_done( void *intent, unsigned int count) { - return xfs_trans_get_rud(tp, intent, count); + return xfs_trans_get_rud(tp, intent); } /* Process a deferred rmap update. */ From david@fromorbit.com Mon Aug 1 02:39:15 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 03D0F7CFD for ; Mon, 1 Aug 2016 02:39:15 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C8BFF8F8035 for ; Mon, 1 Aug 2016 00:39:11 -0700 (PDT) X-ASG-Debug-ID: 1470037148-0bf57b369e2c9850001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id lIYtBu5WCsvw0asr for ; Mon, 01 Aug 2016 00:39:09 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Effective-Source-IP: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AocOALP7nld5LBnFIGdsb2JhbABdg0WBUoZxnR8GjF+KGYYXAgIBAQKBKE0BAQEBAQEHAQEBAQEBNwFAhF8BBTocIxAIAxgJJQ8FJQMHGhOIMMBkAQEIAgEkHoVEhRWECIYTAQSZM451j0mMMIN3gmGBfyoyhxuBNgEBAQ Received: from ppp121-44-25-197.lns20.syd4.internode.on.net (HELO dastard) ([121.44.25.197]) by ipmail04.adl6.internode.on.net with ESMTP; 01 Aug 2016 17:09:07 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1bU7oY-0001cG-9q; Mon, 01 Aug 2016 17:39:06 +1000 Date: Mon, 1 Aug 2016 17:39:06 +1000 From: Dave Chinner To: Dan Williams Cc: Keith Packard , Jan Kara , "linux-nvdimm@lists.01.org" , XFS Developers , linux-fsdevel , linux-ext4 Subject: Re: Subtle races between DAX mmap fault and write path Message-ID: <20160801073906.GK16044@dastard> X-ASG-Orig-Subj: Re: Subtle races between DAX mmap fault and write path References: <20160727221949.GU16044@dastard> <20160728081033.GC4094@quack2.suse.cz> <20160729022152.GZ16044@dastard> <20160730001249.GE16044@dastard> <20160801014645.GI16044@dastard> <86k2g15gh8.fsf@hiro.keithp.com> <20160801040737.GJ16044@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1470037148 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2043 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Sun, Jul 31, 2016 at 09:39:38PM -0700, Dan Williams wrote: > On Sun, Jul 31, 2016 at 9:07 PM, Dave Chinner wrote: > > OTOH, DAX directly exposes the physical layout to the filesytem. > > And because it's DAX-based pmem and not cached struct pages, we > > can't run vm_map_ram() to virtually map the range we need to see as > > a contiguous range, as we do in XFS for large objects such as directory > > blocks and log buffers. For other large objects such as inode > > clusters, we can directly map each page as the objects within the > > clusters are page aligned and never overlap page boundaries, but > > that only works for inode and dquot buffers. Hence DAX as it stands > > makes it extremely difficult to "retrofit" DAX into all aspects of > > existing fileystems because exposing physical discontiguities breaks > > code that assumes they don't exist. > > On this specific point about page remapping, the administrator can > configure struct pages for pmem and you can detect whether they are > present in the filesystem with pfn_t_has_page(). I.e. you could > require pages be present for XFS, if that helps... It's kinda silly to require struct pages for the entire pmem device if they are only needed for accessing a (comparitively) small amount of metadata. Besides, now that I look at it more deeply, we can't use virtually mapped pmem for the log buffers. We can't allocate memory at the point in time where we work out what LBA in the log we need to map to physical pmem for the current log write. Hence calls to vm_map_ram() can't be used, and so that rules out using mapped page based pmem for log buffers. I'll probably have to rewrite the xlog_write() engine completely to be able to handle discontiguous pages in the iclog buffers before we can consider mapping them via DAX now, and I'm really not sure it's worth the effort. I'd much prefer to spend time designing a native pmem filesystem.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 03:00:46 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 744617CEC for ; Mon, 1 Aug 2016 03:00:46 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 42401304051 for ; Mon, 1 Aug 2016 01:00:46 -0700 (PDT) X-ASG-Debug-ID: 1470038443-0bf57b369e2cb980001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id o8JMmHOyuT69r5Lx (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Mon, 01 Aug 2016 01:00:44 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU89N-0000im-JH; Mon, 01 Aug 2016 08:00:37 +0000 Date: Mon, 1 Aug 2016 01:00:37 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 09/47] xfs: introduce interval queries on btrees Message-ID: <20160801080037.GA30547@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 09/47] xfs: introduce interval queries on btrees References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907701913.25461.16492865819245768513.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907701913.25461.16492865819245768513.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470038443 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 978 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, Jul 20, 2016 at 09:56:59PM -0700, Darrick J. Wong wrote: > Create a function to enable querying of btree records mapping to a > range of keys. This will be used in subsequent patches to allow > querying the reverse mapping btree to find the extents mapped to a > range of physical blocks, though the generic code can be used for > any range query. > > v2: add some shortcuts so that we can jump out of processing once > we know there won't be any more records to find. > > v3: document the range query algorithm, refactor the pop-up code, > fix the diff_two_keys usage. > > v4: The overlapped query range function should use the btree get_block > helper because the root block could be an inode, in which case > bc_bufs[nlevels-1] will be NULL. Refactor the key calculations > so that we can return -EINVAL if low > high. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 03:02:34 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 1EC877CFD for ; Mon, 1 Aug 2016 03:02:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id A1FD7AC002 for ; Mon, 1 Aug 2016 01:02:30 -0700 (PDT) X-ASG-Debug-ID: 1470038548-0bf8157e6c322620001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id qb8LzLZHVbngJ7xQ (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Mon, 01 Aug 2016 01:02:29 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU8B5-0000t5-8F; Mon, 01 Aug 2016 08:02:23 +0000 Date: Mon, 1 Aug 2016 01:02:23 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 11/47] xfs: move deferred operations into a separate file Message-ID: <20160801080223.GB30547@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 11/47] xfs: move deferred operations into a separate file References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907703710.25461.16650495404061662831.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907703710.25461.16650495404061662831.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470038549 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 507 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31665 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS I looked over this again and I really don't see the use case of merging it. Yes, the freed extent, rmap and reflink code is fairly similar, but there is all kinds of subtile differences that we need to paper over using methods and flags. I think we're better off not trying to share this code and have a separate, but easily understandable implementation for each btree. At least for the traditional traditional freed extent case the new code also is a lot less optimal than the previous version. From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 03:10:33 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 3895B7D03 for ; Mon, 1 Aug 2016 03:10:33 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0AF79304051 for ; Mon, 1 Aug 2016 01:10:29 -0700 (PDT) X-ASG-Debug-ID: 1470039026-0bf57c136a273da0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id lNiQ20nFGQ6ZX4PD (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Mon, 01 Aug 2016 01:10:27 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bU8Ip-0004ST-KW; Mon, 01 Aug 2016 08:10:23 +0000 Date: Mon, 1 Aug 2016 01:10:23 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 18/47] xfs: refactor redo intent item processing Message-ID: <20160801081023.GC30547@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 18/47] xfs: refactor redo intent item processing References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907708421.25461.405239727630066080.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907708421.25461.405239727630066080.stgit@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470039027 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1710 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS > +int > +xfs_efi_recover( > + struct xfs_mount *mp, > + struct xfs_efi_log_item *efip) > +{ > + struct xfs_efd_log_item *efdp; > + struct xfs_trans *tp; > + int i; > + int error = 0; > + xfs_extent_t *extp; > + xfs_fsblock_t startblock_fsb; > + > + ASSERT(!test_bit(XFS_EFI_RECOVERED, &efip->efi_flags)); > + > + /* > + * First check the validity of the extents described by the > + * EFI. If any are bad, then assume that all are bad and > + * just toss the EFI. > + */ > + for (i = 0; i < efip->efi_format.efi_nextents; i++) { > + extp = &(efip->efi_format.efi_extents[i]); > + startblock_fsb = XFS_BB_TO_FSB(mp, > + XFS_FSB_TO_DADDR(mp, extp->ext_start)); > + if ((startblock_fsb == 0) || > + (extp->ext_len == 0) || > + (startblock_fsb >= mp->m_sb.sb_dblocks) || > + (extp->ext_len >= mp->m_sb.sb_agblocks)) { > + /* > + * This will pull the EFI from the AIL and > + * free the memory associated with it. > + */ > + set_bit(XFS_EFI_RECOVERED, &efip->efi_flags); > + xfs_efi_release(efip); > + return -EIO; > + } > + } I know it's just a code move, but there are lots of superflous braces here, please remove them. > + error = xfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate, 0, 0, 0, &tp); > + if (error) > + return error; > + efdp = xfs_trans_get_efd(tp, efip, efip->efi_format.efi_nextents); > + > + for (i = 0; i < efip->efi_format.efi_nextents; i++) { > + extp = &(efip->efi_format.efi_extents[i]); and here.. > + ASSERT(XFS_LSN_CMP(last_lsn, lip->li_lsn) >= 0); This new check seems useful, but nothing in the changelog mentions why it has been added. Otherwise this looks fine to me. From BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org Mon Aug 1 04:03:06 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 9A36B7D02 for ; Mon, 1 Aug 2016 04:03:06 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6DC63304048 for ; Mon, 1 Aug 2016 02:03:03 -0700 (PDT) X-ASG-Debug-ID: 1470042179-0bf57c13692760f0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id rbkEob6WR8JziSpZ (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Mon, 01 Aug 2016 02:03:00 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3661fea9d560e80d7b9c+4726+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] 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.85_2 #1 (Red Hat Linux)) id 1bU97j-00030G-4v; Mon, 01 Aug 2016 09:02:59 +0000 From: Christoph Hellwig To: fstests@vger.kernel.org Cc: xfs@oss.sgi.com Subject: [PATCH] generic/095: update warning whitelist Date: Mon, 1 Aug 2016 11:02:56 +0200 X-ASG-Orig-Subj: [PATCH] generic/095: update warning whitelist Message-Id: <1470042176-31447-1-git-send-email-hch@lst.de> X-Mailer: git-send-email 2.1.4 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: 1470042180 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1174 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.20 X-Barracuda-Spam-Status: No, SCORE=1.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC5_MJ1963, MARKETING_SUBJECT, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31665 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 The recent direct I/O path refactor changed the function name in the racing read case. Update the test case to handle the new name in addition to the old one. Signed-off-by: Christoph Hellwig --- tests/generic/095 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/generic/095 b/tests/generic/095 index c656ef1..4754992 100755 --- a/tests/generic/095 +++ b/tests/generic/095 @@ -125,9 +125,11 @@ $FIO_PROG $fio_config >>$seqres.full 2>&1 filter_xfs_dmesg() { local warn1="WARNING:.*fs/xfs/xfs_file\.c:.*xfs_file_dio_aio_write.*" - local warn2="WARNING:.*fs/xfs/xfs_file\.c:.*xfs_file_read_iter.*" + local warn2="WARNING:.*fs/xfs/xfs_file\.c:.*xfs_file_dio_aio_read.*" + local warn3="WARNING:.*fs/xfs/xfs_file\.c:.*xfs_file_read_iter.*" sed -e "s#$warn1#Intentional warnings in xfs_file_dio_aio_write#" \ - -e "s#$warn2#Intentional warnings in xfs_file_read_iter#" + -e "s#$warn2#Intentional warnings in xfs_file_dio_aio_read#" \ + -e "s#$warn3#Intentional warnings in xfs_file_read_iter#" } # umount before checking dmesg in case umount triggers any WARNING or Oops -- 2.1.4 From sales05@topa.site Mon Aug 1 04:17:03 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_FONT_FACE_BAD, 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 646E47D07 for ; Mon, 1 Aug 2016 04:17:03 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 366698F8035 for ; Mon, 1 Aug 2016 02:16:59 -0700 (PDT) X-ASG-Debug-ID: 1470043017-0bf57b369c2cf1d0001-NocioJ Received: from server1.topa.site (host12.dfhgjhhh.com [47.88.15.216]) by cuda.sgi.com with ESMTP id TPdwUpE5KiATdoPY for ; Mon, 01 Aug 2016 02:16:57 -0700 (PDT) X-Barracuda-Envelope-From: sales05@topa.site X-Barracuda-Effective-Source-IP: host12.dfhgjhhh.com[47.88.15.216] X-Barracuda-Apparent-Source-IP: 47.88.15.216 Received: from PC-201102141339 (218.17.231.77) by server1.topa.site id hjs9ok0e97cn for ; Mon, 1 Aug 2016 17:16:56 +0800 (envelope-from ) From: "hongmypcb1@126.com" Subject: RE:We would like to establish business relationship with your honor company To: xfs@oss.sgi.com X-ASG-Orig-Subj: RE:We would like to establish business relationship with your honor company MIME-Version: 1.0 Sender: sales05@topa.site Reply-To: hongmypcb1@126.com Date: Mon, 1 Aug 2016 17:16:58 +0800 X-Mailer: Foxmail 6, 13, 102, 15 [cn] Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 Content-Disposition: inline X-Barracuda-Connect: host12.dfhgjhhh.com[47.88.15.216] X-Barracuda-Start-Time: 1470043017 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 10247 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_FONT_FACE_BAD, HTML_MESSAGE, MIME_HTML_ONLY, MISSING_MID X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31665 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.61 HTML_FONT_FACE_BAD BODY: HTML font face is not a word Message-Id: <20160801091659.C721D64005C@cuda.sgi.com> PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv L0VOIj4NCjxIVE1MIHhtbG5zOm8+PEhFQUQ+DQo8TUVUQSBodHRwLWVxdWl2PWNvbnRlbnQtdHlw ZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPg0KPE1FVEEgY29udGVudD0iTVNI VE1MIDYuMDAuMjkwMC42NTUwIiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+DQo8Qk9EWT4NCjxESVYg DQpzdHlsZT0iV09SRC1TUEFDSU5HOiAwcHg7IEZPTlQ6IDE0cHgvMjJweCBBcmlhbDsgVEVYVC1U UkFOU0ZPUk06IG5vbmU7IENPTE9SOiByZ2IoNTEsOTIsMTczKTsgVEVYVC1JTkRFTlQ6IDBweDsg V0hJVEUtU1BBQ0U6IG5vcm1hbDsgTEVUVEVSLVNQQUNJTkc6IG5vcm1hbDsgQkFDS0dST1VORC1D T0xPUjogcmdiKDI1NSwyNTUsMjU1KTsgb3JwaGFuczogYXV0bzsgd2lkb3dzOiAxOyB3ZWJraXQt dGV4dC1zdHJva2Utd2lkdGg6IDBweCI+PFNQQU4gDQpsYW5nPUVOLVVTIA0Kc3R5bGU9IkZPTlQt U0laRTogMTFwdDsgQ09MT1I6IHJnYigwLDAsMTI4KTsgRk9OVC1GQU1JTFk6IEFyaWFsIj5EZWFy PFNQQU4gDQpzdHlsZT0iRk9OVC1XRUlHSFQ6IG5vcm1hbDsgRk9OVC1TSVpFOiAxMXB0OyBDT0xP UjogcmdiKDAsMCwxMjgpOyBGT05ULVNUWUxFOiBub3JtYWw7IEZPTlQtRkFNSUxZOiBBcmlhbCI+ Jm5ic3A7Jm5ic3A7UHVyY2hhc2luZyANCk1hbmFnZXImbmJzcDsmbmJzcDs8U1BBTiANCmNsYXNz PUFwcGxlLWNvbnZlcnRlZC1zcGFjZT4mbmJzcDs8L1NQQU4+PC9TUEFOPjwvU1BBTj48U1BBTiBs YW5nPUVOLVVTIA0Kc3R5bGU9IkZPTlQtV0VJR0hUOiBub3JtYWw7IEZPTlQtU0laRTogMTFwdDsg Q09MT1I6IHJnYigwLDAsMTI4KTsgRk9OVC1TVFlMRTogbm9ybWFsOyBGT05ULUZBTUlMWTogQXJp YWwiPiw8L1NQQU4+PFNQQU4gDQpsYW5nPUVOLVVTIHN0eWxlPSJGT05ULVNJWkU6IDEycHQ7IENP TE9SOiByZ2IoMCw2NCwxMjgpOyBGT05ULUZBTUlMWTog5a6L5L2TIj48bzpwIA0Kc3R5bGU9IkZP TlQtV0VJR0hUOiBub3JtYWw7IEZPTlQtU0laRTogMTFwdDsgQ09MT1I6IHJnYigwLDAsMTI4KTsg Rk9OVC1TVFlMRTogbm9ybWFsOyBGT05ULUZBTUlMWTogQXJpYWwiPjwvbzpwPjwvU1BBTj48L0RJ Vj4NCjxESVYgDQpzdHlsZT0iV09SRC1TUEFDSU5HOiAwcHg7IEZPTlQ6IDE0cHgvMjJweCBBcmlh bDsgVEVYVC1UUkFOU0ZPUk06IG5vbmU7IENPTE9SOiByZ2IoNTEsOTIsMTczKTsgVEVYVC1JTkRF TlQ6IDBweDsgV0hJVEUtU1BBQ0U6IG5vcm1hbDsgTEVUVEVSLVNQQUNJTkc6IG5vcm1hbDsgQkFD S0dST1VORC1DT0xPUjogcmdiKDI1NSwyNTUsMjU1KTsgb3JwaGFuczogYXV0bzsgd2lkb3dzOiAx OyB3ZWJraXQtdGV4dC1zdHJva2Utd2lkdGg6IDBweCI+DQo8RElWIGNsYXNzPUZveERpdjIwMTMw ODI2MTcxMzA4ODQzNTQ4Pg0KPERJVj4NCjxESVYgY2xhc3M9Rm94RGl2MjAxMzA4MjMyMzQ5MTYy MDA5ODggc3R5bGU9IkJBQ0tHUk9VTkQtQ09MT1I6IHdoaXRlIj4NCjxESVY+DQo8RElWIGNsYXNz PUZveERpdjIwMTMwODIzMjMxMjM4Njk4Mzg1IHN0eWxlPSJCQUNLR1JPVU5ELUNPTE9SOiB3aGl0 ZSI+DQo8RElWPg0KPERJViBjbGFzcz1Gb3hEaXYyMDEzMDgyMzIyNDAyOTc5NTUwMCBzdHlsZT0i QkFDS0dST1VORC1DT0xPUjogd2hpdGUiPg0KPERJVj4NCjxESVYgY2xhc3M9Rm94RGl2MjAxMzA4 MjExMDI2MjgzMjg2OTA+DQo8RElWPg0KPERJViBjbGFzcz1Gb3hEaXYyMDEzMDYyNzE2NDU0NjAx NTEwNT4NCjxESVY+DQo8RElWIGNsYXNzPUZveERpdjIwMTMwNjI1MTYyMzQ3MDkzNDY5Pg0KPERJ Vj4NCjxESVYgY2xhc3M9Rm94RGl2MjAxMzA2MjUxNjE4MTU2MDk2Mzc+DQo8RElWPg0KPERJViBj bGFzcz1Gb3hEaXYyMDEzMDUyODE2MzI0MDE1NjIwMD4NCjxESVY+DQo8RElWIGNsYXNzPUZveERp djIwMTMwNTI4MTYxMTIxNTE1MTQ5Pg0KPERJVj4NCjxESVYgY2xhc3M9Rm94RGl2MjAxMzA1Mjgx NDMwNDQ1OTM1NjM+DQo8RElWPg0KPERJViBjbGFzcz1Gb3hEaXYyMDEzMDUyODE0MjgwODY4NzIy NT4NCjxESVY+DQo8RElWPg0KPERJVj4NCjxESVYgY2xhc3M9Rm94RGl2MjAxMzA1MjExNjAyNTc4 NzU0NTU+DQo8RElWPg0KPERJViBjbGFzcz1Gb3hEaXYyMDEzMDUyMTE0MzUwNTkyMTc0OD4NCjxE SVY+DQo8RElWIGNsYXNzPUZveERpdjIwMTMwNTIxMTQyNzQxODkwMzE5Pg0KPERJVj4NCjxESVYg Y2xhc3M9Rm94RGl2MjAxMzA1MjExMTU1NDM3NTA1MzM+DQo8RElWPg0KPERJViBjbGFzcz1Gb3hE aXYyMDEzMDUyMTExNTMwNzA0NjEyMT4NCjxESVY+DQo8RElWIGNsYXNzPUZveERpdjIwMTMwNTIx MTE0NTUxNzUwNjg1Pg0KPERJVj4NCjxESVYgY2xhc3M9Rm94RGl2MjAxMzA1MjAxODA3MDEyOTYx MTY+DQo8RElWPg0KPERJVj4NCjxQIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0iTUFSR0lOOiAwY20g MGNtIDBwdDsgVEVYVC1BTElHTjogbGVmdCIgDQphbGlnbj1sZWZ0PjxTUEFOIGxhbmc9RU4tVVMg DQpzdHlsZT0iRk9OVC1TSVpFOiAxMnB0OyBDT0xPUjogcmdiKDAsMCwxMjgpOyBGT05ULUZBTUlM WTog5a6L5L2TIj4mbmJzcDs8bzpwIA0Kc3R5bGU9IkNPTE9SOiByZ2IoMCwwLDEyOCkiPjwvbzpw PjwvU1BBTj48L1A+DQo8UCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9Ik1BUkdJTjogMGNtIDBjbSAw cHQ7IFRFWFQtQUxJR046IGxlZnQiIGFsaWduPWxlZnQ+PEEgDQpzdHlsZT0iQ09MT1I6IHJnYig1 NiwxNDgsMTkzKTsgVEVYVC1ERUNPUkFUSU9OOiBub25lIiB0YXJnZXQ9X2JsYW5rIA0KbmFtZT1P TEVfTElOSzM+PFNQQU4gbGFuZz1FTi1VUyANCnN0eWxlPSJGT05ULVNJWkU6IDExcHQ7IENPTE9S OiByZ2IoMCwwLDEyOCk7IEZPTlQtRkFNSUxZOiBBcmlhbCI+SSBhbSBDb2NvIENIRU4gDQpmcm9t Jm5ic3A7Jm5ic3A7U2hlbnpoZW4mbmJzcDtIb25nbXkmbmJzcDtQcmVjaXNpb24mbmJzcDtDaXJj dWl0Jm5ic3A7Q28uLCZuYnNwO0x0ZCANCmFuZCBzbyBmb3J0dW5hdGUga25vdyB5b3VyIGNvbXBh bnkgZnJvbSB3ZWJzaXRlLjxTUEFOIA0KY2xhc3M9QXBwbGUtY29udmVydGVkLXNwYWNlPiZuYnNw OzwvU1BBTj48L1NQQU4+PC9BPjxTUEFOIGxhbmc9RU4tVVMgDQpzdHlsZT0iRk9OVC1TSVpFOiAx MXB0OyBDT0xPUjogcmdiKDAsMCwxMjgpOyBGT05ULUZBTUlMWTogQXJpYWwiPkhvbmdteTxCIA0K c3R5bGU9IkNPTE9SOiByZ2IoMCwwLDEyOCkiPjxTUEFOIA0KY2xhc3M9QXBwbGUtY29udmVydGVk LXNwYWNlPiZuYnNwOzwvU1BBTj48L0I+aXMgYW4gaW50ZXJuYXRpb25hbCBtYW51ZmFjdHVyZXIg DQpzcGVjaWFsaXplZCBpbiB0aGU8U1BBTiBjbGFzcz1BcHBsZS1jb252ZXJ0ZWQtc3BhY2U+Jm5i c3A7PC9TUEFOPjxCPjxVIA0Kc3R5bGU9IkNPTE9SOiByZ2IoMCwwLDEyOCkiPlByaW50ZWQgQ2ly Y3VpdCBCb2FyZHM8L1U+PC9CPjwvU1BBTj48U1BBTiANCmxhbmc9RU4tVVMgDQpzdHlsZT0iRk9O VC1TSVpFOiAxMXB0OyBDT0xPUjogcmdiKDAsMCwxMjgpOyBGT05ULUZBTUlMWTogQXJpYWwiPjxT UEFOIA0KY2xhc3M9QXBwbGUtY29udmVydGVkLXNwYWNlPiZuYnNwOzwvU1BBTj48L1NQQU4+PFNQ QU4gbGFuZz1FTi1VUyANCnN0eWxlPSJGT05ULVNJWkU6IDExcHQ7IENPTE9SOiByZ2IoMCwwLDEy OCk7IEZPTlQtRkFNSUxZOiBBcmlhbCI+ZmllbGQgYW5kIA0KbG9jYXRlZCBpbiBDaGluYS48L1NQ QU4+PC9QPg0KPFAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSJNQVJHSU46IDBjbSAwY20gMHB0OyBU RVhULUFMSUdOOiBsZWZ0IiANCmFsaWduPWxlZnQ+PFNQQU4gbGFuZz1FTi1VUyANCnN0eWxlPSJG T05ULVNJWkU6IDExcHQ7IENPTE9SOiByZ2IoMCwwLDEyOCk7IEZPTlQtRkFNSUxZOiBBcmlhbCI+ Jm5ic3A7PG86cCANCnN0eWxlPSJDT0xPUjogcmdiKDAsMCwxMjgpIj48L286cD48L1NQQU4+PC9Q Pg0KPFAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSJNQVJHSU46IDBjbSAwY20gMHB0OyBURVhULUFM SUdOOiBsZWZ0IiANCmFsaWduPWxlZnQ+PFNQQU4gbGFuZz1FTi1VUyANCnN0eWxlPSJGT05ULVNJ WkU6IDExcHQ7IENPTE9SOiByZ2IoMCwwLDEyOCk7IEZPTlQtRkFNSUxZOiBBcmlhbCI+SG9uZ215 IGhhdmUgDQpiZWVuIHdvcmtpbmcgYXMgb25lIG9mIHRoZSBwcm9mZXNzaW9uYWw8U1BBTiANCmNs YXNzPUFwcGxlLWNvbnZlcnRlZC1zcGFjZT4mbmJzcDs8L1NQQU4+PEIgc3R5bGU9IkNPTE9SOiBy Z2IoMCwwLDEyOCkiPjxVIA0Kc3R5bGU9IkNPTE9SOiByZ2IoMCwwLDEyOCkiPkNoaW5lc2UgUHJp bnRlZCBDaXJjdWl0IEJvYXJkPC9VPjxTUEFOIA0KY2xhc3M9QXBwbGUtY29udmVydGVkLXNwYWNl PiZuYnNwOzwvU1BBTj48L0I+c3VwcGxpZXJzIHdpdGggOSB5ZWFycyYjMzk7IGhpc3RvcnkgaW4g DQpQQ0Igd29ybGR3aWRlIGJ1c2luZXNzLlRoZSBQQ0IgZnJvbSAxLTE2bGF5ZXJzIHdpdGggdGhl IG1hdGVyaWFsIEZSNCxBbHVtaW51bSANCmJhc2UuPC9TUEFOPjwvUD4NCjxQIGNsYXNzPU1zb05v cm1hbCBzdHlsZT0iTUFSR0lOOiAwY20gMGNtIDBwdDsgVEVYVC1BTElHTjogbGVmdCIgDQphbGln bj1sZWZ0PjxTUEFOIGxhbmc9RU4tVVMgDQpzdHlsZT0iRk9OVC1TSVpFOiAxMXB0OyBDT0xPUjog cmdiKDAsMCwxMjgpOyBGT05ULUZBTUlMWTogQXJpYWwiPjwvU1BBTj48U1BBTiANCmxhbmc9RU4t VVMgDQpzdHlsZT0iRk9OVC1TSVpFOiAxMnB0OyBDT0xPUjogcmdiKDAsMCwxMjgpOyBGT05ULUZB TUlMWTog5a6L5L2TIj4mbmJzcDs8L1NQQU4+PFNQQU4gDQpsYW5nPUVOLVVTIA0Kc3R5bGU9IkZP TlQtU0laRTogMTJwdDsgQ09MT1I6IHJnYigwLDAsMTI4KTsgRk9OVC1GQU1JTFk6IOWui+S9kyI+ Jm5ic3A7PG86cCANCnN0eWxlPSJDT0xPUjogcmdiKDAsMCwxMjgpIj48L286cD48L1NQQU4+PC9Q Pg0KPFAgY2xhc3M9TXNvTm9ybWFsIA0Kc3R5bGU9Ik1BUkdJTjogMGNtIDBjbSAwcHQ7IFdPUkQt QlJFQUs6IGJyZWFrLWFsbDsgTElORS1IRUlHSFQ6IDIzcHg7IFRFWFQtQUxJR046IGxlZnQiIA0K YWxpZ249bGVmdD48U1BBTiBsYW5nPUVOLVVTIA0Kc3R5bGU9IkZPTlQtV0VJR0hUOiBub3JtYWw7 IEZPTlQtU0laRTogMTFwdDsgQ09MT1I6IHJnYigwLDAsMTI4KTsgTElORS1IRUlHSFQ6IDIzcHg7 IEZPTlQtU1RZTEU6IG5vcm1hbDsgRk9OVC1GQU1JTFk6IEFyaWFsIj5XZSANCmFyZSBsb29raW5n IGZvcndhcmQgdG8gcmVjZWl2aW5nIHlvdXIgaW5xdWlyeSBzb29uIGFuZCBob3BlIHRvJm5ic3A7 ZXN0YWJsaXNoIA0KZ29vZCBidXNpbmVzcyByZWxhdGlvbnNoaXAgd2l0aCB5b3VyIGNvbXBhbnkg Zm9yIG11dHVhbCBiZW5lZml0LjxvOnAgDQpzdHlsZT0iRk9OVC1XRUlHSFQ6IG5vcm1hbDsgRk9O VC1TSVpFOiAxMXB0OyBDT0xPUjogcmdiKDAsMCwxMjgpOyBGT05ULVNUWUxFOiBub3JtYWw7IEZP TlQtRkFNSUxZOiBBcmlhbCI+PC9vOnA+PC9TUEFOPjwvUD4NCjxQIGNsYXNzPU1zb05vcm1hbCBz dHlsZT0iTUFSR0lOOiAwY20gMGNtIDBwdDsgVEVYVC1BTElHTjogbGVmdCIgDQphbGlnbj1sZWZ0 PjxTUEFOIGxhbmc9RU4tVVMgDQpzdHlsZT0iRk9OVC1TSVpFOiAxMnB0OyBDT0xPUjogcmdiKDAs MCwxMjgpOyBGT05ULUZBTUlMWTog5a6L5L2TIj4mbmJzcDs8bzpwIA0Kc3R5bGU9IkNPTE9SOiBy Z2IoMCwwLDEyOCkiPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBjbGFzcz1Nc29Ob3JtYWwgDQpzdHls ZT0iTUFSR0lOOiAwY20gMGNtIDBwdDsgTElORS1IRUlHSFQ6IDIzcHg7IFRFWFQtQUxJR046IGxl ZnQiIA0KYWxpZ249bGVmdD48U1BBTiBsYW5nPUVOLVVTIA0Kc3R5bGU9IkZPTlQtU0laRTogMTFw dDsgQ09MT1I6IHJnYigwLDAsMTI4KTsgTElORS1IRUlHSFQ6IDIzcHg7IEZPTlQtRkFNSUxZOiBB cmlhbCI+VGhhbmtzIA0KeW91IHZlcnkgbXVjaCBmb3Iga2luZGx5IGF0dGVudGlvbiwgYW5kIHdp c2ggeW91IGEgbmljZSBhbmQgZnJ1aXRmdWwgZGF5ITxvOnAgDQpzdHlsZT0iQ09MT1I6IHJnYigw LDAsMTI4KSI+PC9vOnA+PC9TUEFOPjwvUD48L0RJVj4NCjxESVY+Jm5ic3A7PC9ESVY+DQo8SFIg c3R5bGU9IldJRFRIOiAyMTBweDsgSEVJR0hUOiAxcHgiIGFsaWduPWxlZnQgY29sb3I9I2I1YzRk ZiBTSVpFPTE+DQoNCjxESVY+PFNQQU4+DQo8RElWPg0KPERJVj48U1BBTiBsYW5nPUVOLVVTIA0K c3R5bGU9IkZPTlQtU0laRTogMTJwdDsgRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJvbWFu JiMzOTsiPjxGT05UIA0Kc3R5bGU9IkZPTlQtU0laRTogMTFwdDsgQ09MT1I6IHJnYigwLDAsMjU1 KTsgRk9OVC1TVFlMRTogaXRhbGljOyBGT05ULUZBTUlMWTogQXJpYWwiIA0KZmFjZT0iIiBjb2xv cj0jMDAwMDAxIHNpemU9MT4NCjxESVY+PFNQQU4+DQo8RElWPg0KPERJVj4NCjxQIGNsYXNzPU1z b05vcm1hbCBzdHlsZT0iTUFSR0lOOiAwY20gMGNtIDBwdCI+PFNQQU4gbGFuZz1FTi1VUyANCnN0 eWxlPSJGT05ULVNJWkU6IDEycHQ7IEZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYj Mzk7Ij48Rk9OVCANCnN0eWxlPSJGT05ULVNJWkU6IDExcHQ7IENPTE9SOiByZ2IoMCwwLDI1NSk7 IEZPTlQtU1RZTEU6IGl0YWxpYzsgRk9OVC1GQU1JTFk6IEFyaWFsIiANCmZhY2U9IiIgY29sb3I9 IzAwMDAwMSBzaXplPTE+PFNQQU4gbGFuZz1FTi1VUyANCnN0eWxlPSJGT05ULVNJWkU6IDEycHQ7 IEZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7Ij48Rk9OVCANCnN0eWxlPSJG T05ULVNJWkU6IDExcHQ7IENPTE9SOiByZ2IoMCwwLDI1NSk7IEZPTlQtU1RZTEU6IGl0YWxpYzsg Rk9OVC1GQU1JTFk6IEFyaWFsIiANCmZhY2U9IiIgY29sb3I9IzAwMDAwMSBzaXplPTE+V2l0aCBN eSBCZXN0IA0KUmVnYXJkcyw8L0ZPTlQ+PC9TUEFOPjwvRk9OVD48L1NQQU4+PC9QPg0KPFAgY2xh c3M9TXNvTm9ybWFsIHN0eWxlPSJNQVJHSU46IDBjbSAwY20gMHB0Ij48U1BBTiBsYW5nPUVOLVVT IA0Kc3R5bGU9IkZPTlQtU0laRTogMTJwdDsgRk9OVC1GQU1JTFk6ICYjMzk7VGltZXMgTmV3IFJv bWFuJiMzOTsiPjxGT05UIGZhY2U9QXJpYWwgDQpjb2xvcj0jMDAwMGZmPjwvRk9OVD48L1NQQU4+ Jm5ic3A7PC9QPg0KPFAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSJNQVJHSU46IDBjbSAwY20gMHB0 Ij48U1BBTiBsYW5nPUVOLVVTIA0Kc3R5bGU9IkZPTlQtU0laRTogMTJwdDsgRk9OVC1GQU1JTFk6 ICYjMzk7VGltZXMgTmV3IFJvbWFuJiMzOTsiPjxGT05UIA0Kc3R5bGU9IkZPTlQtU0laRTogMTFw dDsgQ09MT1I6IHJnYigwLDAsMjU1KTsgRk9OVC1TVFlMRTogaXRhbGljOyBGT05ULUZBTUlMWTog QXJpYWwiIA0KZmFjZT0iIiBjb2xvcj0jMDAwMDAxIHNpemU9MT5Db2NvIENIRU48L0ZPTlQ+PC9T UEFOPjwvUD4NCjxQIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0iTUFSR0lOOiAwY20gMGNtIDBwdCI+ PFNQQU4gbGFuZz1FTi1VUyANCnN0eWxlPSJGT05ULVNJWkU6IDEycHQ7IEZPTlQtRkFNSUxZOiAm IzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7Ij48L1NQQU4+PFNQQU4gbGFuZz1FTi1VUyANCnN0eWxl PSJGT05ULVNJWkU6IDEycHQ7IEZPTlQtRkFNSUxZOiAmIzM5O1RpbWVzIE5ldyBSb21hbiYjMzk7 Ij48Rk9OVCANCnN0eWxlPSJGT05ULVNJWkU6IDExcHQ7IENPTE9SOiByZ2IoMCwwLDI1NSk7IEZP TlQtU1RZTEU6IGl0YWxpYzsgRk9OVC1GQU1JTFk6IEFyaWFsIiANCmZhY2U9IiIgY29sb3I9IzAw MDAwMSBzaXplPTE+PFNUUk9ORz48L1NUUk9ORz48QlI+T3ZlcnNlYSBTYWxlcyAvIFNhbGVzIA0K RGVwYXJ0bWVudDwvRk9OVD48QlI+PC9TUEFOPjxTUEFOIGxhbmc9RU4tVVMgDQpzdHlsZT0iRk9O VC1TSVpFOiAxMXB0OyBDT0xPUjogcmdiKDAsMCwyNTUpOyBGT05ULVNUWUxFOiBpdGFsaWM7IEZP TlQtRkFNSUxZOiBBcmlhbCI+KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKio8L1NQQU4+PC9QPjwvRElWPjwvRElWPjwvU1BBTj48Rk9O VCANCmNvbG9yPSMwMDQwODA+Jm5ic3A7PC9GT05UPiANCjxQIGNsYXNzPU1zb05vcm1hbCBzdHls ZT0iTUFSR0lOOiAwY20gMGNtIDBwdCI+PFNQQU4gbGFuZz1FTi1VUyANCnN0eWxlPSJGT05ULVNJ WkU6IDExcHQ7IENPTE9SOiByZ2IoMCwwLDI1NSk7IEZPTlQtU1RZTEU6IGl0YWxpYzsgRk9OVC1G QU1JTFk6IEFyaWFsIj5URUw6Jm5ic3A7Kzg2IA0KNzU1IDI2OTU0MDg0IEV4dCA2MDEmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8bzpwIA0Kc3R5bGU9Ik1BUkdJTi1UT1A6IDBw eDsgRk9OVC1TSVpFOiAxMXB0OyBNQVJHSU4tQk9UVE9NOiAwcHg7IENPTE9SOiByZ2IoMCwwLDI1 NSk7IEZPTlQtU1RZTEU6IGl0YWxpYzsgRk9OVC1GQU1JTFk6IEFyaWFsIj48L286cD48L1NQQU4+ PC9QPg0KPFAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSJNQVJHSU46IDBjbSAwY20gMHB0Ij48U1BB TiBsYW5nPUVOLVVTIA0Kc3R5bGU9IkZPTlQtU0laRTogMTFwdDsgQ09MT1I6IHJnYigwLDAsMjU1 KTsgRk9OVC1TVFlMRTogaXRhbGljOyBGT05ULUZBTUlMWTogQXJpYWwiPkZBWDombmJzcDsrODYt NzU1IA0KODYzNzI2NTM8QlI+PC9TUEFOPjwvUD4NCjxQIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0i TUFSR0lOOiAwY20gMGNtIDBwdCI+PFNQQU4gbGFuZz1FTi1VUyANCnN0eWxlPSJGT05ULVNJWkU6 IDExcHQ7IENPTE9SOiByZ2IoMCwwLDI1NSk7IEZPTlQtU1RZTEU6IGl0YWxpYzsgRk9OVC1GQU1J TFk6IEFyaWFsIj5Ta3lwZTombmJzcDtjb2NvaG9uZ215cGNiJm5ic3A7Jm5ic3A7Jm5ic3A7PC9T UEFOPjwvUD4NCjxQIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0iTUFSR0lOOiAwY20gMGNtIDBwdCI+ PFNQQU4gbGFuZz1FTi1VUyANCnN0eWxlPSJGT05ULVNJWkU6IDExcHQ7IENPTE9SOiByZ2IoMCww LDI1NSk7IEZPTlQtU1RZTEU6IGl0YWxpYzsgRk9OVC1GQU1JTFk6IEFyaWFsIj48U1BBTiANCmxh bmc9RU4tVVMgDQpzdHlsZT0iRk9OVC1TSVpFOiAxMXB0OyBDT0xPUjogYmx1ZTsgRk9OVC1GQU1J TFk6IEFyaWFsLCBzYW5zLXNlcmlmIj5FLW1haWw6aG9uZ215cGNiMUAxMjYuY29tJm5ic3A7Jm5i c3A7PC9TUEFOPjwvU1BBTj48L1A+DQo8UCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9Ik1BUkdJTjog MGNtIDBjbSAwcHQiPjxTUEFOIGxhbmc9RU4tVVMgDQpzdHlsZT0iRk9OVC1TSVpFOiAxMXB0OyBD T0xPUjogcmdiKDAsMCwyNTUpOyBGT05ULVNUWUxFOiBpdGFsaWM7IEZPTlQtRkFNSUxZOiBBcmlh bCI+PFNQQU4gDQpsYW5nPUVOLVVTIA0Kc3R5bGU9IkZPTlQtU0laRTogMTFwdDsgQ09MT1I6IGJs dWU7IEZPTlQtRkFNSUxZOiBBcmlhbCwgc2Fucy1zZXJpZiI+V2hhdCYjMzk7c2FwcDo4NjE1OTg2 NjU5MDEzPC9TUEFOPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvU1BBTj48U1BBTiANCmxhbmc9 RU4tVVMgDQpzdHlsZT0iRk9OVC1TSVpFOiAxMXB0OyBDT0xPUjogcmdiKDAsMCwyNTUpOyBGT05U LVNUWUxFOiBpdGFsaWM7IEZPTlQtRkFNSUxZOiBBcmlhbCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9T UEFOPjxTUEFOIA0KbGFuZz1FTi1VUyANCnN0eWxlPSJGT05ULVNJWkU6IDExcHQ7IENPTE9SOiBy Z2IoMCwwLDI1NSk7IEZPTlQtU1RZTEU6IGl0YWxpYzsgRk9OVC1GQU1JTFk6IEFyaWFsIj48U1BB TiANCmNsYXNzPUFwcGxlLWNvbnZlcnRlZC1zcGFjZT4mbmJzcDs8L1NQQU4+PC9TUEFOPjxTUEFO IGxhbmc9RU4tVVMgDQpzdHlsZT0iRk9OVC1TSVpFOiAxMXB0OyBDT0xPUjogcmdiKDAsMCwyNTUp OyBGT05ULVNUWUxFOiBpdGFsaWM7IEZPTlQtRkFNSUxZOiBBcmlhbCI+Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7PC9TUEFOPjwvUD48L0RJVj48L0ZPTlQ+PC9TUEFOPjwvRElWPjwvRElWPjwvU1BB Tj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48 L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJ Vj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48 L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0RJ Vj48L0RJVj48L0RJVj48L0RJVj48L0RJVj48L0JPRFk+PC9IVE1MPg0KDQo= From boaz@plexistor.com Mon Aug 1 05:13:52 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A12F87D0A for ; Mon, 1 Aug 2016 05:13:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5869B304048 for ; Mon, 1 Aug 2016 03:13:52 -0700 (PDT) X-ASG-Debug-ID: 1470046428-0bf8157e6c327e50001-NocioJ Received: from mail-wm0-f46.google.com (mail-wm0-f46.google.com [74.125.82.46]) by cuda.sgi.com with ESMTP id CV2SEFSCxyD0QXS8 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Mon, 01 Aug 2016 03:13:49 -0700 (PDT) X-Barracuda-Envelope-From: boaz@plexistor.com X-Barracuda-Effective-Source-IP: mail-wm0-f46.google.com[74.125.82.46] X-Barracuda-Apparent-Source-IP: 74.125.82.46 Received: by mail-wm0-f46.google.com with SMTP id i5so236692823wmg.0 for ; Mon, 01 Aug 2016 03:13:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=plexistor-com.20150623.gappssmtp.com; s=20150623; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-transfer-encoding; bh=BSGmNjcW8hmS5bvBY976Ih5cLjY05WiqH+ixt6MHH6k=; b=qjTnQcxzgsMq674zkaR7sU1qGNkEYctVlth8vugy5XsEKSxta/GW/1acrPWmJYRpIy etmXID/i3Y0fMENqSPHNkcr8yB03yrN+rDYY+p8Zn67pgoM3BK0mkiAoF9dVvOUgKUgN tj89oDcvUgYF0h2oMet5CoAntbTG42RP6i/DUrhwCWayAOxGKdsNbv6hwVPZB8W1Rf0Z cKfcfS/QXABwDsE671a66Itlqd6TLChKx3nQxFMB7JiKrYSGjyGXAIGSceAOln2BZ/aS 29Ssx5/dPvR0locaDX9m9XO7fwo2HxacXwPpKuryLFPj3/JgQfyl5BxlkWFOJrGMhAaP VgRg== 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-transfer-encoding; bh=BSGmNjcW8hmS5bvBY976Ih5cLjY05WiqH+ixt6MHH6k=; b=TanVAhA0iE9FMueeFOw/X+lEIl3DSolW1XLxoScFlCEoN3FxwVlAiFT+eKze7l5Wlf HWIYGNfTmSBGnOkdOxujkNr64pr0WXc0hB3ecST5AiK5MLg+toYrvgI8hvjk6SU+s4mx zk4abJn+474Y+NVfIu/R3HVLmL34AiCCqmoJTlRjrytwM56l7GjKrgfzuTUnnNQVsDi7 bumTu/M2BntIoBKuZJCs3AYaYGWN5htJln0IZVYa/aVj0IilhM8hATzb9HNp40fBlZjV v1aFMymoK0LSPJl82tHVOnnvnddwDDzirsxhGXylQEWb4WuwxV81BWPw4fIBS5xD52lt E4SA== X-Gm-Message-State: AEkoouup0z08ghe8+oIQvfsVLqpXR8WV7NMy8XzfsEl37bowHVv0ZHyHZQrnsUtsBnoWtw== X-Received: by 10.194.235.229 with SMTP id up5mr55082943wjc.69.1470046428240; Mon, 01 Aug 2016 03:13:48 -0700 (PDT) Received: from [10.0.0.5] ([207.232.55.62]) by smtp.googlemail.com with ESMTPSA id pm1sm29728183wjb.40.2016.08.01.03.13.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 01 Aug 2016 03:13:47 -0700 (PDT) Message-ID: <579F20D9.80107@plexistor.com> Date: Mon, 01 Aug 2016 13:13:45 +0300 From: Boaz Harrosh User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Dave Chinner , Dan Williams CC: Jan Kara , "linux-nvdimm@lists.01.org" , XFS Developers , linux-fsdevel , linux-ext4 Subject: Re: Subtle races between DAX mmap fault and write path References: <20160727120745.GI6860@quack2.suse.cz> <20160727211039.GA20278@linux.intel.com> <20160727221949.GU16044@dastard> <20160728081033.GC4094@quack2.suse.cz> <20160729022152.GZ16044@dastard> <20160730001249.GE16044@dastard> X-ASG-Orig-Subj: Re: Subtle races between DAX mmap fault and write path In-Reply-To: <20160730001249.GE16044@dastard> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-wm0-f46.google.com[74.125.82.46] X-Barracuda-Start-Time: 1470046429 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2319 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31666 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 07/30/2016 03:12 AM, Dave Chinner wrote: <> > > If we track the dirty blocks from write in the radix tree like we > for mmap, then we can just use a normal memcpy() in dax_do_io(), > getting rid of the slow cache bypass that is currently run. Radix > tree updates are much less expensive than a slow memcpy of large > amounts of data, ad fsync can then take care of persistence, just > like we do for mmap. > No! mov_nt instructions, That "slow cache bypass that is currently run" above is actually faster then cached writes by 20%, and if you add the dirty tracking and cl_flush instructions it becomes x2 slower in the most optimal case and 3 times slower in the DAX case. The network guys have noticed the mov_nt instructions superior performance for years before we pushed DAX into the tree. look for users of copy_from_iter_nocache and the comments when they where introduced, those where used before DAX, and nothing at all to do with persistence. So what you are suggesting is fine only 3 times slower in the current implementation. > We should just make the design assumption that all persistent memory > is volatile, track where we dirty it in all paths, and use the > fastest volatile memcpy primitives available to us in the IO path. The "fastest volatile memcpy primitives available" is what we do today with the mov_nt instructions. > We'll end up with a faster fastpath that if we use CPU cache bypass > copies, dax_do_io() and mmap will be coherent and synchronised, and > fsync() will have the same requirements and overhead regardless of > the way the application modifies the pmem or the hardware platform > used to implement the pmem. > I measured, there is tests running in our labs every night, your suggestion on an ADR system is 3 times slower to reach persistence. Is why I was pushing for MMAP_PMEM_AWARE, because a smart mmap application from user-mode uses mov_nt anyway because it wants that 20% gain regardless of what the Kernel will do. Then it calls fsync() and the Kernel will burn x2 more CPU, just for the sake of burning CPU, because the data is already persistent at the get go. > Cheers, > Dave. As you, I do not care for DAX very much, but please lets keep the physical facts strait Cheers indeed Boaz From lista.unx@gmail.com Mon Aug 1 06:24:11 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.9 required=5.0 tests=FREEMAIL_FROM,STOX_REPLY_TYPE, 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 EA2F77D11 for ; Mon, 1 Aug 2016 06:24:10 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7CD88AC001 for ; Mon, 1 Aug 2016 04:24:07 -0700 (PDT) X-ASG-Debug-ID: 1470050644-0bf8157e6d332d50001-NocioJ Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by cuda.sgi.com with ESMTP id Mn7mF98Qljus71Nf (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Mon, 01 Aug 2016 04:24:05 -0700 (PDT) X-Barracuda-Envelope-From: lista.unx@gmail.com X-Barracuda-Effective-Source-IP: mail-wm0-f67.google.com[74.125.82.67] X-Barracuda-Apparent-Source-IP: 74.125.82.67 Received: by mail-wm0-f67.google.com with SMTP id i5so25725978wmg.2 for ; Mon, 01 Aug 2016 04:24:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:from:to:references:subject:date:mime-version :content-transfer-encoding; bh=/FmqyKFCWfEmgOiCnS3qgWdDscJgll0xyMCE5z/cZrk=; b=g4fSdyT0Q62NV0LFj8jDerRkrJgoj1KIqjPWTSFl9KReiEYlfrWmhN5LqcOcvVPeKt /EabYhpXtp9ubuJ7VnreX5Go//rrM/H8/k/DG5Ah0mQK/MyZiNqqJI0Cqi2OUWnuhwGS z5Tah1rUjrOdotIwOdLctqb5ZaX71cESbh/Ugb/KDKy2ijxyLhN3B9lFhMTDBcHc9AM+ /fwhkqhQdMOqBWds/DO6nERpDF+FV4gHV+ishfuD1GFKfarrvCRwo0qEelzlT3O+3eWc ZLsuPCkFsVuqfEWsUgdkp3mPb/CgAKb9DGL26sgbtoaM8Q6lOuNuMBO36XGo36myg2Fb B3dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:from:to:references:subject:date :mime-version:content-transfer-encoding; bh=/FmqyKFCWfEmgOiCnS3qgWdDscJgll0xyMCE5z/cZrk=; b=Ib28Gm38rHDyrsNS+Vr3D2bHuvE67t1N1+TMNdhrsLXOpWLa1PdAaKE4pZcMXWy15R sFA+gZxLJJuBGQBEhv0H/PS3h0+/u8nvuvlwudGLiVq8EVznjgBhKamo0CjaYhG0Y3SJ dv4htCA0En7PTaafr4I/Y+uibGqhcaIJxwpw6vBxaffzdsGZuaYaifYwYwXPzBSmfMxa fKMnJD6PcJkqrXdGta3JqfhhTre1SpQBH6WBhnVvs9C0TRfZeGeMNvrFVD0pBWSBgK0Y mWN7ROAbQTQ4OF+SGhqrl4rTA/7lofVY5PammFP9vDNVa6gv9sVd4simSoFWTmFCwqQC 8u0w== X-Gm-Message-State: AEkoouvoLokmBVI7c/2uFwfY5sjvMTj/fr2ukAviGFI+Fs2kAIL1tPuvImaTELjmCSfuvQ== X-Received: by 10.194.104.197 with SMTP id gg5mr50156224wjb.6.1470050643914; Mon, 01 Aug 2016 04:24:03 -0700 (PDT) Received: from dinulap (dev155.demoshop.ro. [5.2.129.155]) by smtp.gmail.com with ESMTPSA id v203sm16585448wmv.2.2016.08.01.04.24.02 for (version=TLS1 cipher=DES-CBC3-SHA bits=112/168); Mon, 01 Aug 2016 04:24:03 -0700 (PDT) Message-ID: <37A306C32B7B409DB062BB807061728D@dinulap> From: "Lista Unx" To: References: <4278AB9734C1445A8E48635B155149F8@dinulap> <83306f91-6bc3-258b-19a8-68e60317de43@sandeen.net> Subject: Re: partition 100% full No space left on device. looks like xfs iscorrupted or a bug Date: Mon, 1 Aug 2016 14:24:02 +0300 X-ASG-Orig-Subj: Re: partition 100% full No space left on device. looks like xfs iscorrupted or a bug MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5931 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157 X-Barracuda-Connect: mail-wm0-f67.google.com[74.125.82.67] X-Barracuda-Start-Time: 1470050645 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2870 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, STOX_REPLY_TYPE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31667 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 STOX_REPLY_TYPE STOX_REPLY_TYPE -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature ----- Original Message ----- From: "Eric Sandeen" To: Sent: Saturday, July 30, 2016 12:49 AM Subject: Re: partition 100% full No space left on device. looks like xfs iscorrupted or a bug > Can you include full contents of /proc/mounts? > > If you have something bind-mounted or similar, it will hide it from "du" > traversal. > > -Eric > Yes, see below: # cat /proc/mounts rootfs / rootfs rw 0 0 sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 devtmpfs /dev devtmpfs rw,nosuid,size=32873088k,nr_inodes=8218272,mode=755 0 0 securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0 tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0 devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,nosuid,nodev,mode=755 0 0 tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0 cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups -agent,name=systemd 0 0 pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0 cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0 cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0 cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0 cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0 cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0 cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0 cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0 cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0 cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0 configfs /sys/kernel/config configfs rw,relatime 0 0 /dev/mapper/centos-root / xfs rw,relatime,attr2,inode64,logbsize=256k,sunit=512,swidth=512,noquota 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=28,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0 debugfs /sys/kernel/debug debugfs rw,relatime 0 0 mqueue /dev/mqueue mqueue rw,relatime 0 0 hugetlbfs /dev/hugepages hugetlbfs rw,relatime 0 0 sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0 nfsd /proc/fs/nfsd nfsd rw,relatime 0 0 binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0 /dev/mapper/centos-home /home xfs rw,relatime,attr2,inode64,logbsize=256k,sunit=512,swidth=512,noquota 0 0 /dev/sda1 /boot xfs rw,relatime,attr2,inode64,logbsize=256k,sunit=512,swidth=512,noquota 0 0 tmpfs /run/user/0 tmpfs rw,nosuid,nodev,relatime,size=6576812k,mode=700 0 0 From lista.unx@gmail.com Mon Aug 1 07:00:14 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.9 required=5.0 tests=FREEMAIL_FROM,STOX_REPLY_TYPE, 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 38A3C7D13 for ; Mon, 1 Aug 2016 07:00:14 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 914B8AC002 for ; Mon, 1 Aug 2016 05:00:13 -0700 (PDT) X-ASG-Debug-ID: 1470052810-0bf57c136a27f9c0001-NocioJ Received: from mail-wm0-f54.google.com (mail-wm0-f54.google.com [74.125.82.54]) by cuda.sgi.com with ESMTP id 4OHT5Z0ESmlQMrxb (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Mon, 01 Aug 2016 05:00:11 -0700 (PDT) X-Barracuda-Envelope-From: lista.unx@gmail.com X-Barracuda-Effective-Source-IP: mail-wm0-f54.google.com[74.125.82.54] X-Barracuda-Apparent-Source-IP: 74.125.82.54 Received: by mail-wm0-f54.google.com with SMTP id i5so240748464wmg.0 for ; Mon, 01 Aug 2016 05:00:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:from:to:cc:references:subject:date:mime-version :content-transfer-encoding; bh=zu4TSDBNbIIY6zxTWURG9mjdiemkPY2YylKcSPouND4=; b=Gx8SWxuDleoGjrY9TqMi9pOHDpMYiRuABlO/BVKHUcnR0re6JoasJabopzEF3RVigU JJE5gM6Gaogn4vBKzV034L4hAp4/z27Hc2GD/n33ZGtUrVTbXWOYvEdQ4U7HahNyzmep 5R8kVumluP/QXu9Ao85Nqy/b47YMIKOoQ3mZgDhCwyqySB1wdHhiLtJeVcJdDb9br0GY JPyG2H7ZtDeurQaBSoSlklcZc5ZVDc3bbQ60ZI/IGnJUDZ38g1/e2XTqDz28vE4ECDp5 2tyDIjU9FmZhWvM/bx+9EjsAfkdsCSrS0cCccNNlNnni8UzjFopLOLDqp0eqHPV/APDe rpWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:from:to:cc:references:subject:date :mime-version:content-transfer-encoding; bh=zu4TSDBNbIIY6zxTWURG9mjdiemkPY2YylKcSPouND4=; b=aZ0/SZZ27VbwmHxbj0s6FXvpybe6RAbDHqv/pRCLK5BCj+xQWc3egpnWJibmUpa2Kz pqRAfCpM2+n2rpjsxCbz91OHkvYktfGEWSlB4ixDQ9gkANxc2DLovDfizFXST9VuhVeo 2gGzQmEKxxzBAH3McjME7ksbBNjrMUbxUfNffnedWnxfG2atJvWLP+s5s9fwg+bNDbly ezspvtwkOc8mu+ljL1yQszAa600tPyaj3BX6CeaAYyUvGC/xCOHDHrGRuNdhZgB6FzLw 0RM1h7q8BuL50oU3BzpqxDphjrgy8Kx29V0Uy6kESsbUZ36OP3V3B6PtvQCiQNueRECn DOaQ== X-Gm-Message-State: AEkoouuSQNvUgi9LtinXeYhBKqkUTXGtaJnpeEglhRdZBSQatY2neN0m3ld5Sa6/YsqrEw== X-Received: by 10.28.29.211 with SMTP id d202mr53686715wmd.64.1470052809836; Mon, 01 Aug 2016 05:00:09 -0700 (PDT) Received: from dinulap (dev155.demoshop.ro. [5.2.129.155]) by smtp.gmail.com with ESMTPSA id a21sm16786725wma.10.2016.08.01.05.00.08 (version=TLS1 cipher=DES-CBC3-SHA bits=112/168); Mon, 01 Aug 2016 05:00:09 -0700 (PDT) Message-ID: <57CF7681619F42CCB4C0CF589E9686E5@dinulap> From: "Lista Unx" To: "Dave Chinner" Cc: References: <4278AB9734C1445A8E48635B155149F8@dinulap> <20160729233524.GD16044@dastard> Subject: Re: partition 100% full No space left on device. looks like xfs iscorrupted or a bug Date: Mon, 1 Aug 2016 15:00:08 +0300 X-ASG-Orig-Subj: Re: partition 100% full No space left on device. looks like xfs iscorrupted or a bug MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5931 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157 X-Barracuda-Connect: mail-wm0-f54.google.com[74.125.82.54] X-Barracuda-Start-Time: 1470052811 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 3447 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED, STOX_REPLY_TYPE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31667 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 STOX_REPLY_TYPE STOX_REPLY_TYPE 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature ----- Original Message ----- From: "Dave Chinner" To: "Lista Unx" Cc: Sent: Saturday, July 30, 2016 2:35 AM Subject: Re: partition 100% full No space left on device. looks like xfs iscorrupted or a bug > Ok, so you followed my advice on why you couldn't post to the list, Yes, I've created a new gmail account especially to be able to post to this mailing list which is filtering very seriously legit messages comming from legit usres, just because they are comming from yahoo accounts (servers) ... but is allowing ANYONE else to post here WITHOUT having valid subscription and also WITHOUT any minimal intention to post here something which has or is related to XFS. Just in last days, I was informed about new microwave acquisition, plastic delivery, or any other craps arriving here from a "trusted and very legit" source, like gmail. That's sound like really a very good job! > but you ignored my answer as to the cause of the changing numbers of > inodes. I'll repeat it here for the benefit of everyone, so they > don't waste time chasing ghosts. No, not at all, is not my style. Just mentioned twice to you, that we are not talking about number of inode usage. we are talking about max number of inodes which differ with at least 10 times less, for partitions with THE SAME SIZE AND USAGE! > That is, inodes are dynamically allocated so the number of supported > inodes is directly proportional to the amount of free space left in > the filesystem. You have filesystems with different amounts NO! Booth systems are almost identical (minor differencies) and this has been stated very clear on my first post. That's not necessary to comment each line in my post, just to point us in the right direction. > That's probably because there are open but unlinked files present in > the filesystem, and du will not find them. e.g. large O_TMPFILE > files, or files that applications are using as scratch space. You > may even have zombie processes hanging about holding unlinked files > open. Has been mentioned on my first post, reboot does not solve problem, there are no (large, small or any kind of files) exahusting inodes! > > lsof might find those files, it might not. There might also be > orphan inodes on the unlinked lists, and without an unclean shutdown > log recovery won't process them. Yes, also mentioned on my first post, lsof does not show anomalies ... > So it may simply be best to run > sync, then press the reset button to do a hard restart which > will trigger log recovery on restart. The same, mentioned on my first post, reboot (which will clean zombies) does not resolve issue. > If the problem still persists, > then xfs_repair is really the only option to find out where the > space has gone and recover it. Yes, that was also my conclusion BEFORE to post here. I did not have (yet) possibility to put / partition offline (or to not be mounted in order to run xfs_repair) and that's I asked here, considering that someone in the past encountered a simillar problem or in case not, there are few other things to be done, in order to consider that the last step to follow is to put server down for deep investigation. I am still waiting approval to put server down for deep investigations (xfs_repaid & friends). Have a nice day, Alex From robin.listas@telefonica.net Mon Aug 1 07:23:49 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 504EB7D15 for ; Mon, 1 Aug 2016 07:23:49 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 14ACB304048 for ; Mon, 1 Aug 2016 05:23:45 -0700 (PDT) X-ASG-Debug-ID: 1470054223-0bf57b369b2dc000001-NocioJ Received: from smtp.movistar.es (smtp21.acens.net [86.109.99.145]) by cuda.sgi.com with ESMTP id zxoDf7n3fR7soA57 for ; Mon, 01 Aug 2016 05:23:43 -0700 (PDT) X-Barracuda-Envelope-From: robin.listas@telefonica.net X-Barracuda-Effective-Source-IP: smtp21.acens.net[86.109.99.145] X-Barracuda-Apparent-Source-IP: 86.109.99.145 X-Junkmail-Premium-Raw: score=8/50,refid=2.7.2:2016.8.1.95417:17:8.129,ip=,rules=__HAS_FROM, __TO_MALFORMED_2, __TO_NAME, __TO_NAME_DIFF_FROM_ACC, __BOUNCE_CHALLENGE_SUBJ, __BOUNCE_NDR_SUBJ_EXEMPT, __SUBJ_ALPHA_END, __IN_REP_TO, __HAS_MSGID, __SANE_MSGID, __REFERENCES, __USER_AGENT, __MIME_VERSION, __CT, __CTYPE_HAS_BOUNDARY, __CTYPE_MULTIPART, __CTYPE_MULTIPART_MIXED, __ANY_URI, __URI_NO_WWW, __STOCK_PHRASE_24, __STOCK_PHRASE_7, __SUBJ_ALPHA_NEGATE, __LINES_OF_YELLING, __FORWARDED_MSG, BODYTEXTP_SIZE_3000_LESS, BODY_SIZE_2000_2999, __MIME_TEXT_ONLY, HTML_00_01, HTML_00_10, BODY_SIZE_5000_LESS, IN_REP_TO, REFERENCES, BODY_SIZE_7000_LESS, NO_URI_HTTPS, MSG_THREAD, __TO_REAL_NAMES, LEGITIMATE_SIGNS, MIME_TEXT_ONLY_MP_MIXED, LEGITIMATE_NEGATE Received: from minas-tirith.valinor (95.126.209.47) by smtp.movistar.es (8.6.122.03) (authenticated as robin.listas2) id 574060E703944F45 for xfs@oss.sgi.com; Mon, 1 Aug 2016 12:23:42 +0000 Received: from localhost (localhost [127.0.0.1]) by minas-tirith.valinor (Postfix) with ESMTP id 554071814D5 for ; Mon, 1 Aug 2016 14:23:41 +0200 (CEST) Date: Mon, 1 Aug 2016 14:23:41 +0200 (CEST) From: "Carlos E. R." Sender: cer@minas-tirith.valinor To: XFS mailing list Subject: Re: partition 100% full No space left on device. looks like xfs iscorrupted or a bug In-Reply-To: <57CF7681619F42CCB4C0CF589E9686E5@dinulap> X-ASG-Orig-Subj: Re: partition 100% full No space left on device. looks like xfs iscorrupted or a bug Message-ID: References: <4278AB9734C1445A8E48635B155149F8@dinulap> <20160729233524.GD16044@dastard> <57CF7681619F42CCB4C0CF589E9686E5@dinulap> User-Agent: Alpine 2.20 (LSU 67 2015-01-07) MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="-1463758550-1059158630-1470053550=:18210" Content-ID: X-Barracuda-Connect: smtp21.acens.net[86.109.99.145] X-Barracuda-Start-Time: 1470054223 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2155 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31667 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1463758550-1059158630-1470053550=:18210 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8BIT Content-ID: -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Content-ID: El 2016-08-01 a las 15:00 +0300, Lista Unx escribió: > El 2016-07-30 a las 09:35 +1000, Dave Chinner escribió: >> That is, inodes are dynamically allocated so the number of supported >> inodes is directly proportional to the amount of free space left in >> the filesystem. You have filesystems with different amounts > > NO! Booth systems are almost identical (minor differencies) and this has been > stated very clear on my first post. That's not necessary to comment each line > in my post, just to point us in the right direction. They are identical, except that one has free space and the other does not. Number of inodes is dynamic and associated to free space. No free space, thus, almost no inodes available. One thing follows from the other. >> That's probably because there are open but unlinked files present in >> the filesystem, and du will not find them. e.g. large O_TMPFILE >> files, or files that applications are using as scratch space. You >> may even have zombie processes hanging about holding unlinked files >> open. > Has been mentioned on my first post, reboot does not solve problem, > there are no (large, small or any kind of files) > exahusting inodes! Dave refers to a unix/linux "feature". Files can be deleted, but if they are in use at the time, the contents are not deleted. Disk shows an ammount of free space that does not match the total - used space. However, a reboot clears this situation, and you did say in the original post you had rebooted the system. - -- Cheers Carlos E. R. (from 13.1 x86_64 "Bottle" (Minas Tirith)) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iF4EAREIAAYFAlefP00ACgkQja8UbcUWM1xEEQD+P6UaCgpP4L/ZES7wmVBBgLib Rx78tVXJJKE5+FCQAY8BAI+6boqtqicVZA3PeOYM8PCa9IrRKyHffx3l5ty0LKpI =h9xF -----END PGP SIGNATURE----- ---1463758550-1059158630-1470053550=:18210-- From quantumcode@gmail.com Mon Aug 1 08:12:44 2016 Return-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=FREEMAIL_FROM,SINGLE_HEADER_2K, TVD_SPACE_RATIO 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 9D0E07D18 for ; Mon, 1 Aug 2016 08:12:44 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6F015304048 for ; Mon, 1 Aug 2016 06:12:44 -0700 (PDT) X-ASG-Debug-ID: 1470057155-0bf57b369d2de1b0001-NocioJ Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-am5eur03hn0232.outbound.protection.outlook.com [104.47.8.232]) by cuda.sgi.com with ESMTP id e5DqMhYKWAeYmlyO (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 01 Aug 2016 06:12:36 -0700 (PDT) X-Barracuda-Envelope-From: quantumcode@gmail.com X-Barracuda-Effective-Source-IP: mail-am5eur03hn0232.outbound.protection.outlook.com[104.47.8.232] X-Barracuda-Apparent-Source-IP: 104.47.8.232 Received: from DB3PR03CA0025.eurprd03.prod.outlook.com (2a01:111:e400:9438::25) by AM3PR03MB1012.eurprd03.prod.outlook.com (2a01:111:e400:586b::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.549.15; Mon, 1 Aug 2016 13:12:34 +0000 Received: from DB5EUR03FT025.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e0a::208) by DB3PR03CA0025.outlook.office365.com (2a01:111:e400:9438::25) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.549.15 via Frontend Transport; Mon, 1 Aug 2016 13:12:33 +0000 Authentication-Results: spf=softfail (sender IP is 217.21.237.90) smtp.mailfrom=gmail.com; oss.sgi.com; dkim=none (message not signed) header.d=none;oss.sgi.com; dmarc=fail action=none header.from=gmail.com; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning gmail.com discourages use of 217.21.237.90 as permitted sender) Received: from smtprelay02.stockholm.se (217.21.237.90) by DB5EUR03FT025.mail.protection.outlook.com (10.152.20.104) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.557.8 via Frontend Transport; Mon, 1 Aug 2016 13:12:34 +0000 Received: from WS01101 (ws01101.ad.stockholm.se [172.23.137.229]) by smtprelay02.stockholm.se (8.14.4/8.14.4) with SMTP id u71DCXak016046 for ; Mon, 1 Aug 2016 15:12:33 +0200 thread-index: AdHr9l25MnF9K0XHSJO2zA2uIOWeMA== Thread-Topic: Link from skulptur.stockholm.se From: To: Subject: Link from skulptur.stockholm.se Date: Mon, 1 Aug 2016 15:12:33 +0200 X-ASG-Orig-Subj: Link from skulptur.stockholm.se Message-ID: <17E7ED65580F48258560279CA6876AAC@ad.stockholm.se> MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit X-Mailer: Microsoft CDO for Windows 2000 Content-Class: urn:content-classes:message Importance: normal Priority: normal X-MimeOLE: Produced By Microsoft MimeOLE V6.2.9200.21896 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131145307548061188;(10d0e04f-2bcf-451d-47f0-08d3afca154a);() X-Forefront-Antispam-Report: CIP:217.21.237.90;IPV:NLI;CTRY:SE;EFV:NLI;SFV:SPM;SFS:(10009020)(6009001)(7916002)(2980300002)(199003)(189002)(7636002)(7696003)(5003940100001)(356003)(7846002)(189998001)(15395725005)(9686002)(76482005)(450100001)(1720100001)(2906002)(2876002)(73972006)(77096005)(33656002)(81442002)(8426002)(558084003)(15975445007)(87936001)(48376002)(105596002)(87572001)(50986999)(586003)(86152002)(44726023)(8676002)(246002)(50226002)(305945005)(8936002)(86362001)(50466002)(104016004)(230700001)(81816999)(62236002)(6260500002)(47776003)(82202001)(5880100001)(92566002)(73392002)(102836003)(110136002)(19580395003)(61296003)(83322999)(15198665003)(229853001)(2920100001)(2351001)(44706002)(106466001)(107886002)(60750200001)(569964007);DIR:OUT;SFP:1501;SCL:5;SRVR:AM3PR03MB1012;H:smtprelay02.stockholm.se;FPR:;SPF:SoftFail;PTR:remail2.stockholm.se;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB5EUR03FT025;1:bQHrXNDFgeXwrQYd6neQZ6q2WYI5Ozp/Cm9tK0uuH0vH7UrNUvnbfLvpbJLgkAxfkv72glqGsHuzqFnWnfo3TMcQQ9uGJtZZ54HoK6TCqnQ598XQ1qbiAPt1Rc8SYNfQpjH1+Dact0MEnROpBBVbNedVD3viTOhTwgphqq4NwHa9caw2AeHjHGa5hblbIVuSp7k4ZosY7orS57JHqkoIYjaDf5Z3JXOdDMnyD4uoYyeUooNwRlRA94sTt0csPPoJYN8Q2vXr3QedsSxgZXxUjs7nvd9kzgFqSkc55baleBbvZgVFzkkD4N+3E/BwVUo2BLMO07CDN5jtzsuQ2h5gNp05x+BC7QcYW1aIE4wJsCnEvpr8SE855HtG62LV/G13xsVbFdERVeJFKnQ5/6APQBteF6DQaK58z70sivQ3PzgAcnWvHPEfJPmynHF1XZ5vKCPSg5EsNnT4hqLjg4tTuL6u5/xs0uHl5gM+z2YKvYYNJCgfdt4qr0AnXHvPq3cOvMV7WqedohI4l/BGLq5srROSmYOWT0k6yPrHBa1/4f0= X-MS-Office365-Filtering-Correlation-Id: ede00e1b-021f-4956-a364-08d3ba0d80a8 X-Microsoft-Exchange-Diagnostics: 1;AM3PR03MB1012;2:yiF7dJ1aSKFLsX/B1Wn2GkOaSu1tTH6tO5EAZA9Syl6ZSnmXcZXPkMSxsha9K9sobOY62fH4FpgsXlr0tbJmiJYlZUHy266Wm8O0U/Vkou9+Xw/d6wdtDRPEd83oopktkq0qSztHqK2n3X9lU9qeh3RqhEopAVwtt2CfyUzBErRTLECkjniz0IUuLMUpxaCP;3:PRAxzsabsCQBrszlbJBRLsQclzNSZaYihytdWHU1ZvhxguCx3seNI1EqIVc4TisCnbDBbfyXo2aOMW9O8tMsYp9CzWVN17h9xu8mpi66web7vxEhnUr/POgCDyzD6F4tXkvvdYIO4WK1e1+tNL7SUTMlPVImySQ8q39LChQUFgr4C8Ifshlwh2h7G8/0YIaWliiG0dCzM+6nJWXiKVA3jFfQFyd/zF6fUkojX+ZrZp8= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM3PR03MB1012; X-Microsoft-Exchange-Diagnostics: 1;AM3PR03MB1012;25:dxJlRFBaqEzB8gjdfile9rEaGrHw5nCEiThiQIxZadN5W95H8+ghyeG0Ujha5jVEFXyIvh/LNqlPpU2vbqU9nnz54yOW0VCQFue1Ly7AdsEvncMrooczwoFPiPv04XZRhec9GAt1XlItLqYxsiIYsqYRQc8jip5aP4hamcgk58+GHbFkDwTx9AM89Jto+i/z7XJjYXYEeWuXMCGj/Wx4XMwGKCB77rohKsfIbhBuoXQ//fKz0DQn7/Nk8vLZQw7Sj3o/OLPnnFnz8BYV36IoPx7BBcpbgf6nm1HJJ0e3d5DIx0vjuGReNhpJ1K0GGDPXnm9+EaXZGE0l7bZgXrelwcsMNg0zha79wcg8B3sTiJE1iFCB48PtnQGARiB/n0BuQXcR6DJO1Po/w598OpFyIQEHRkUzOSN8VzfjxJbrOcrQlxSVK+q5gfW7ODJCdb9R7oFOgxpIf7T2tiyJq90xngDaYNJc+cYSEhImCMsCoUYEjrlVdeK0n7YF2lepYZ9w3zbX8ZVFF/wDJ5f2aEtPKc9nuTt4Gk6N/mOyWiDefvnuoU+t2fiebNcjfPV9Mvfy+g8EzGA8e9wpkPIwURNrwsgtEOoROA2DfEk3hYNNepQtcHLxK37IlY2XqHL5b+/jJou6FITR7JcmddYC47jnJPN+j4N8AQ0ta1zV4BK176W7ctV0hkXIrWMfiBOpNvez3wA4D83XTbM+ndFPcJ7bdeQu+D53gWWnq+jJ1O/I7P4iEq+/rwGjjowPLAQn6Lf2d4oB/UKg2p7A03iInH8gCJpdezVMDH0CTwAkIHLGtyo= X-Microsoft-Exchange-Diagnostics: 1;AM3PR03MB1012;31:Y+WOS6WoG08NQuhmmNN9qwUVnPf2y0qwI7H5/gGauECJIkgiX1gzQfNZZZrF6fB/QKl8+yiOtfRwQ0zbyCRCVZiO2Fy/cRJ2/WUL/HfDt4EP3JZ55q3AFwMHifYj1aEgnLSAH/4NJY7qHZcQIafoGut767KzfmHaBlRXaEBv5fP9ud0uQCB1Ef+9zTHwDCwcvUQeeRv7Wwkr+UaABtCpWvheHAu2a4OycauLnhq7d48=;4:BA7+Ek++NlcCbuj2IK8wxhy7DsJesE7pOE0NeYibDmsDszRKyavjRQsDsRM2Dt74Jfvl/KqLV3Ds9FEyojdLa7VVX100qdaiusKrpdQPCMKs5n59vCrMl5JGkAfpaRGzEk2bCf+H+d58NNZ/pNH0ydGV6vE6zFkvxT14D+B/1vtc163QZXJ0uhOZ1WjlOhea015dshEHBtKtzhVtc1C1EmiZAM5EsHq+L5MpnLYRSYh8TH+IOqc0fPeSQd8uMK9kJko2DNH5z1v+UbasNqRaviKyw7KvRPw++Xcm0cuiNxtEvSjtjPTrn6kQArjkHzZyncxZOLignXMikZl5i0eQC5X6IojyNAkaiKUmUsojIcHNqbLHNjVgEJuqvlZlWe8ARDVqOJcw7nn95VwtItC6cgkoBOVz5ZeKBwo0mxrij6GMFb/nUj2geCbgp2H72rZEhBRYRitWOvUptvQu7zrxO0O+vaAu0CgQ7x5sWNR5zejxn9sWE7WHoZWgDdDRitS2 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(20890368164391); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(13018025)(13024025)(13023025)(13016025)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:AM3PR03MB1012;BCL:0;PCL:0;RULEID:(400006);SRVR:AM3PR03MB1012; X-Forefront-PRVS: 0021920B5A X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AM3PR03MB1012;23:+9K2cuPmHDZO55q0Egpp2j7GMzKG3B2jEmhrngkCP?= =?us-ascii?Q?trxETvSuvPCBqdIrgfaHteFg7AJDlReWvReLog267wP5CDj1speCCKjVlzVC?= =?us-ascii?Q?vt0J1Gjsgu7wAc1RofZT78mEYKK05KSz0pW4RvTe3hgT9b1gc3vTcxdYxzjJ?= =?us-ascii?Q?VCvi4V1g3ZrNnh72mv49SN6FJgHHOrbrbvxnWwo51Wt3ags7WoAzdpD+v7MZ?= =?us-ascii?Q?X5I0E7b/lGsZ7wj2hr1nf6SgfBaYbFVZqF4vTrrJFwPYvWKLNFcn9CS65DfB?= =?us-ascii?Q?GLwWFc4mjjCA7oYGHWBK6poefdz9IdSUpSxYKZfNw7QfFzeXso61Jg0y5/y8?= =?us-ascii?Q?2N7gxZ/2mFQYy+MWex4EDb++dLjshAfswYtjNI4iMNPFhomD7i/OoceGWifK?= =?us-ascii?Q?MUTCBoW2yuc6WHewZ8qyRb05MfH+ryIcLINZHvEWUPpyyEfccvuhUfLFtamz?= =?us-ascii?Q?Sf3xfpHb1vIlFFKRINTYDRoTVYOO/ZNt0LjxBaB2GM91PXTOP9z8BittY5pO?= =?us-ascii?Q?RfQYo/GpbXwb63DWpcNm4LUbWoUiAxOApLCsk8LsKoN5cFdm5awiXkz1q5gO?= =?us-ascii?Q?IJsfufnGLVkULb8Qwj8s7ILTqIQsuWYqRwcySK6SPeNiuS/yKre5peWf98z5?= =?us-ascii?Q?Ci4lR+QYpO4KXKBA7St3Q+QgubtcUu52L5VCQ0fLGxWztSp92xKP3+Tq1Qqe?= =?us-ascii?Q?H/GTWEk5TZ1PvhuSJ89P7SSA0K3MONOyAAclq5AF/6yRzK+1gOk0BHksH7mY?= =?us-ascii?Q?pco3CGuvaPxwnobXj9AH4yV3CaN5lmu4PZ1RfkDCfwPMRm34RVQ05v9iqbRw?= =?us-ascii?Q?2mwuqbkTj89a8XuqIO/q7Asj/vdWXE6zqqh5Jv/U1GhG62ukIZcsPG47MB6V?= =?us-ascii?Q?kjJ1Hdp0rQe9IpohcxvX5sfvCoRp3F/BcX1WOTtO8y3gjicr+dNGV08rXC3i?= =?us-ascii?Q?HmizWpd9Rxl5l40bLwyIaXjytO+XMT6pFm9GDbwLsouqIea6gHe/qSGeHd9X?= =?us-ascii?Q?qKVPpFetrWnimX0vhuomjq73Z+k4HmCoWmI1LOLG0P1/Jc0b8HXjMUolLEug?= =?us-ascii?Q?1kPxsXs4wZUiwYZScPRSGoM4VAR7LzblDGjmj+ZMIxXs6TdnXTgGi+pF524a?= =?us-ascii?Q?vgGHz6ubO4dR8E9asa+JBwe2rHX2t1JXGsLU7I5THrOlAjCPWhKxQwk0CmcA?= =?us-ascii?Q?fB/ovF4gTbA2pcyy5IPVORAE9awFnTiA2FsBxzDt7LRY2Do4daUqHxlZUtXr?= =?us-ascii?Q?Z4M1cXvQIdm6UzxJmXLvuOtqRiZH0asVvHJc+d+RdTuEwOCJGKBd8KRuYf+s?= =?us-ascii?Q?el/20rwmtHcn+9zllDobsYkx4SfcYTh71xzKH/VdsLFqSoru8ffgu8Wj/uv7?= =?us-ascii?Q?waONGs5osyo87pw5cZ0NtAlm3mB/DVWbyQva0KUyRAkPYd3UjvWP6f2p/u8g?= =?us-ascii?Q?/KOK4iVls3B2z2R+igV3nvaSwXGR4Vpei+wPKZ0pWxYNu6TEj3LTWd3lMfLi?= =?us-ascii?Q?mbO6JhdlHjU3rT72Unqhxb2+coVpAfE30gAn5IIhq74vRfFfWRwQPrHHWnxB?= =?us-ascii?Q?Y+JL5KOZ6FFaL23ccKKCZxhyO9L6YyBX/7+KERZjLdD7OVcsjyUX/od01y/?= X-Microsoft-Exchange-Diagnostics: 1;AM3PR03MB1012;6:sRcJjOiuhqHyt458TczQS1u/LJ+AUBK131xGuYrMUvHoQAn8oxEeafO72B1IIULwm2nkDez4oO8/SYgQmiIYKXZW6x+Tdh4+hBssvJwsk0u2CuQxRVe/TW4vYPc2iXWAIbMorqvE0wjFDBddcMiWKAU+5przcI7WELhWynm0KMxph/xb2YeQwVnGpMRJDBBEJ9+6OS5E3g73CNQFvFy1MR6PPhVNDpZdoln+YxXNaMO5E2mCS++NP626ZL3ti7j1BZI/Fd3RzwHHGidrfipKLqH0thmKZW6KbHJC5O5KNHc=;5:Zk5aVVrSsMy1Vrwk9th0Hx0KI1KTDX/1TnDIQoyLBo5vfXP2fmaLoFU+8cLYi5hleUCkMyjzseFQEGgu+fRxfigItPFt9LomkrIgq3znSEGvv/HTBudp6Ytr418KTsDDJmArTPUCrwQxBHZcl328MOqKZYANzfxmDvMWFOOBxhc=;24:yvuqrhVlYwgrSPcE+G15cHP3ShKtDyXqI+2PPtMntrTFtTwLj1Mf7sWbIQoltByoEEgloSYIaV5yCnVYSiL3NA==;7:HB9ObRM1jcpMVRPZra/oFHcsYvGrMXhT65szHuQbhCI4SblmVoD97gvfXSqrL+LSXvMpvVah9H3CyUbJ253Nfm1j+36Le8kaChfg7u9U4+667WHYOtjK4eWXKIajXTCJCO8KtrUumik4e4l5Voq7NEe/KdKfDQuBgmrOnXQPMorX+Fo4327V9Sm8Btz6Yfup8iFGuODEP8b2dTH5r1/CKsywcwJgsI6Ipd+32zVEAgqiOP6t4W3Fap9M0+P8EAX9 SpamDiagnosticOutput: 1:22 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Aug 2016 13:12:34.3373 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[217.21.237.90];Helo=[smtprelay02.stockholm.se] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR03MB1012 X-Barracuda-Connect: mail-am5eur03hn0232.outbound.protection.outlook.com[104.47.8.232] X-Barracuda-Start-Time: 1470057156 X-Barracuda-Encrypted: ECDHE-RSA-AES256-SHA X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 137 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=NO_REAL_NAME, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31668 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 NO_REAL_NAME From: does not include a real name 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Congratulations,==>> http://ow.ly/ypd4302jPnq http://ow.ly/ypd4302jPnq http://www.skulptur.stockholm.se/default.asp?id=9730&lang=EN From bfoster@redhat.com Mon Aug 1 10:57:44 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 9E9117D18 for ; Mon, 1 Aug 2016 10:57:44 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 25494AC004 for ; Mon, 1 Aug 2016 08:57:40 -0700 (PDT) X-ASG-Debug-ID: 1470067058-0bf8157e6a3484c0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Tefg6nyarIp3ZSbx (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 01 Aug 2016 08:57:39 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6CC27C04D2AC; Mon, 1 Aug 2016 15:57:38 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-147.bos.redhat.com [10.18.41.147]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u71Fvbtk000996; Mon, 1 Aug 2016 11:57:37 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 8E5BE1225E2; Mon, 1 Aug 2016 11:57:36 -0400 (EDT) Date: Mon, 1 Aug 2016 11:57:36 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH v2 07/47] xfs: add function pointers for get/update keys to the btree Message-ID: <20160801155736.GA64218@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH v2 07/47] xfs: add function pointers for get/update keys to the btree References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907700604.25461.2181974283557088355.stgit@birch.djwong.org> <20160728194615.GA15746@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160728194615.GA15746@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Mon, 01 Aug 2016 15:57:38 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470067059 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 11436 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, Jul 28, 2016 at 12:46:15PM -0700, Darrick J. Wong wrote: > Add some function pointers to bc_ops to get the btree keys for > leaf and node blocks, and to update parent keys of a block. > Convert the _btree_updkey calls to use our new pointer, and > modify the tree shape changing code to call the appropriate > get_*_keys pointer instead of _btree_copy_keys because the > overlapping btree has to calculate high key values. > > Signed-off-by: Darrick J. Wong > --- > fs/xfs/libxfs/xfs_alloc_btree.c | 4 + > fs/xfs/libxfs/xfs_bmap_btree.c | 4 + > fs/xfs/libxfs/xfs_btree.c | 164 +++++++++++++++++++++++--------------- > fs/xfs/libxfs/xfs_btree.h | 19 ++++ > fs/xfs/libxfs/xfs_ialloc_btree.c | 8 ++ > 5 files changed, 135 insertions(+), 64 deletions(-) > ... > diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c > index 8d8e362..405442d 100644 > --- a/fs/xfs/libxfs/xfs_btree.c > +++ b/fs/xfs/libxfs/xfs_btree.c ... > @@ -2146,11 +2194,10 @@ xfs_btree_lshift( > */ > cur->bc_ops->init_key_from_rec(&key, > xfs_btree_rec_addr(cur, 1, right)); > - rkp = &key; Sorry, I should have been more clear. I think this entire hunk (the above key initialization and comment) is effectively dead. > } > > - /* Update the parent key values of right. */ > - error = xfs_btree_updkey(cur, rkp, level + 1); > + /* Update the parent keys of the right block. */ > + error = cur->bc_ops->update_keys(cur, level); > if (error) > goto error0; > > @@ -2292,7 +2339,6 @@ xfs_btree_rshift( > xfs_btree_log_recs(cur, rbp, 1, rrecs + 1); > > cur->bc_ops->init_key_from_rec(&key, rrp); > - rkp = &key; Same here. key isn't used beyond this. I see that hch has some objections to the design here. FWIW, resolution of that aside, and with the above fixes: Reviewed-by: Brian Foster > > ASSERT(cur->bc_ops->recs_inorder(cur, rrp, > xfs_btree_rec_addr(cur, 2, right))); > @@ -2321,7 +2367,8 @@ xfs_btree_rshift( > if (error) > goto error1; > > - error = xfs_btree_updkey(tcur, rkp, level + 1); > + /* Update the parent keys of the right block. */ > + error = cur->bc_ops->update_keys(tcur, level); > if (error) > goto error1; > > @@ -2422,6 +2469,11 @@ __xfs_btree_split( > > XFS_BTREE_STATS_ADD(cur, moves, rrecs); > > + /* Adjust numrecs for the later get_*_keys() calls. */ > + lrecs -= rrecs; > + xfs_btree_set_numrecs(left, lrecs); > + xfs_btree_set_numrecs(right, xfs_btree_get_numrecs(right) + rrecs); > + > /* > * Copy btree block entries from the left block over to the > * new block, the right. Update the right block and log the > @@ -2447,14 +2499,15 @@ __xfs_btree_split( > } > #endif > > + /* Copy the keys & pointers to the new block. */ > xfs_btree_copy_keys(cur, rkp, lkp, rrecs); > xfs_btree_copy_ptrs(cur, rpp, lpp, rrecs); > > xfs_btree_log_keys(cur, rbp, 1, rrecs); > xfs_btree_log_ptrs(cur, rbp, 1, rrecs); > > - /* Grab the keys to the entries moved to the right block */ > - xfs_btree_copy_keys(cur, key, rkp, 1); > + /* Stash the keys of the new block for later insertion. */ > + cur->bc_ops->get_node_keys(cur, right, key); > } else { > /* It's a leaf. Move records. */ > union xfs_btree_rec *lrp; /* left record pointer */ > @@ -2463,27 +2516,23 @@ __xfs_btree_split( > lrp = xfs_btree_rec_addr(cur, src_index, left); > rrp = xfs_btree_rec_addr(cur, 1, right); > > + /* Copy records to the new block. */ > xfs_btree_copy_recs(cur, rrp, lrp, rrecs); > xfs_btree_log_recs(cur, rbp, 1, rrecs); > > - cur->bc_ops->init_key_from_rec(key, > - xfs_btree_rec_addr(cur, 1, right)); > + /* Stash the keys of the new block for later insertion. */ > + cur->bc_ops->get_leaf_keys(cur, right, key); > } > > - > /* > * Find the left block number by looking in the buffer. > - * Adjust numrecs, sibling pointers. > + * Adjust sibling pointers. > */ > xfs_btree_get_sibling(cur, left, &rrptr, XFS_BB_RIGHTSIB); > xfs_btree_set_sibling(cur, right, &rrptr, XFS_BB_RIGHTSIB); > xfs_btree_set_sibling(cur, right, &lptr, XFS_BB_LEFTSIB); > xfs_btree_set_sibling(cur, left, &rptr, XFS_BB_RIGHTSIB); > > - lrecs -= rrecs; > - xfs_btree_set_numrecs(left, lrecs); > - xfs_btree_set_numrecs(right, xfs_btree_get_numrecs(right) + rrecs); > - > xfs_btree_log_block(cur, rbp, XFS_BB_ALL_BITS); > xfs_btree_log_block(cur, lbp, XFS_BB_NUMRECS | XFS_BB_RIGHTSIB); > > @@ -2802,6 +2851,7 @@ xfs_btree_new_root( > bp = lbp; > nptr = 2; > } > + > /* Fill in the new block's btree header and log it. */ > xfs_btree_init_block_cur(cur, nbp, cur->bc_nlevels, 2); > xfs_btree_log_block(cur, nbp, XFS_BB_ALL_BITS); > @@ -2810,19 +2860,24 @@ xfs_btree_new_root( > > /* Fill in the key data in the new root. */ > if (xfs_btree_get_level(left) > 0) { > - xfs_btree_copy_keys(cur, > - xfs_btree_key_addr(cur, 1, new), > - xfs_btree_key_addr(cur, 1, left), 1); > - xfs_btree_copy_keys(cur, > - xfs_btree_key_addr(cur, 2, new), > - xfs_btree_key_addr(cur, 1, right), 1); > + /* > + * Get the keys for the left block's keys and put them directly > + * in the parent block. Do the same for the right block. > + */ > + cur->bc_ops->get_node_keys(cur, left, > + xfs_btree_key_addr(cur, 1, new)); > + cur->bc_ops->get_node_keys(cur, right, > + xfs_btree_key_addr(cur, 2, new)); > } else { > - cur->bc_ops->init_key_from_rec( > - xfs_btree_key_addr(cur, 1, new), > - xfs_btree_rec_addr(cur, 1, left)); > - cur->bc_ops->init_key_from_rec( > - xfs_btree_key_addr(cur, 2, new), > - xfs_btree_rec_addr(cur, 1, right)); > + /* > + * Get the keys for the left block's records and put them > + * directly in the parent block. Do the same for the right > + * block. > + */ > + cur->bc_ops->get_leaf_keys(cur, left, > + xfs_btree_key_addr(cur, 1, new)); > + cur->bc_ops->get_leaf_keys(cur, right, > + xfs_btree_key_addr(cur, 2, new)); > } > xfs_btree_log_keys(cur, nbp, 1, 2); > > @@ -2858,7 +2913,7 @@ xfs_btree_make_block_unfull( > int *index, /* new tree index */ > union xfs_btree_ptr *nptr, /* new btree ptr */ > struct xfs_btree_cur **ncur, /* new btree cursor */ > - union xfs_btree_key *key, /* key of new block */ > + union xfs_btree_key *key, /* key of new block */ > int *stat) > { > int error = 0; > @@ -3086,8 +3141,8 @@ xfs_btree_insrec( > xfs_btree_log_block(cur, bp, XFS_BB_NUMRECS); > > /* If we inserted at the start of a block, update the parents' keys. */ > - if (optr == 1) { > - error = xfs_btree_updkey(cur, key, level + 1); > + if (xfs_btree_needs_key_update(cur, optr)) { > + error = cur->bc_ops->update_keys(cur, level); > if (error) > goto error0; > } > @@ -3107,7 +3162,7 @@ xfs_btree_insrec( > */ > *ptrp = nptr; > if (!xfs_btree_ptr_is_null(cur, &nptr)) { > - *key = nkey; > + xfs_btree_copy_keys(cur, key, &nkey, 1); > *curp = ncur; > } > > @@ -3386,8 +3441,6 @@ xfs_btree_delrec( > struct xfs_buf *bp; /* buffer for block */ > int error; /* error return value */ > int i; /* loop counter */ > - union xfs_btree_key key; /* storage for keyp */ > - union xfs_btree_key *keyp = &key; /* passed to the next level */ > union xfs_btree_ptr lptr; /* left sibling block ptr */ > struct xfs_buf *lbp; /* left buffer pointer */ > struct xfs_btree_block *left; /* left btree block */ > @@ -3458,13 +3511,6 @@ xfs_btree_delrec( > xfs_btree_log_keys(cur, bp, ptr, numrecs - 1); > xfs_btree_log_ptrs(cur, bp, ptr, numrecs - 1); > } > - > - /* > - * If it's the first record in the block, we'll need to pass a > - * key up to the next level (updkey). > - */ > - if (ptr == 1) > - keyp = xfs_btree_key_addr(cur, 1, block); > } else { > /* It's a leaf. operate on records */ > if (ptr < numrecs) { > @@ -3473,16 +3519,6 @@ xfs_btree_delrec( > -1, numrecs - ptr); > xfs_btree_log_recs(cur, bp, ptr, numrecs - 1); > } > - > - /* > - * If it's the first record in the block, we'll need a key > - * structure to pass up to the next level (updkey). > - */ > - if (ptr == 1) { > - cur->bc_ops->init_key_from_rec(&key, > - xfs_btree_rec_addr(cur, 1, block)); > - keyp = &key; > - } > } > > /* > @@ -3549,8 +3585,8 @@ xfs_btree_delrec( > * If we deleted the leftmost entry in the block, update the > * key values above us in the tree. > */ > - if (ptr == 1) { > - error = xfs_btree_updkey(cur, keyp, level + 1); > + if (xfs_btree_needs_key_update(cur, ptr)) { > + error = cur->bc_ops->update_keys(cur, level); > if (error) > goto error0; > } > diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h > index b4f3035..e097e60 100644 > --- a/fs/xfs/libxfs/xfs_btree.h > +++ b/fs/xfs/libxfs/xfs_btree.h > @@ -180,6 +180,19 @@ struct xfs_btree_ops { > union xfs_btree_rec *r1, > union xfs_btree_rec *r2); > #endif > + > + /* derive the low & high keys from the records in a leaf block */ > + void (*get_leaf_keys)(struct xfs_btree_cur *cur, > + struct xfs_btree_block *block, > + union xfs_btree_key *key); > + > + /* derive the low & high keys from the keys in a node block */ > + void (*get_node_keys)(struct xfs_btree_cur *cur, > + struct xfs_btree_block *block, > + union xfs_btree_key *key); > + > + /* update the parent keys of given btree level */ > + int (*update_keys)(struct xfs_btree_cur *cur, int level); > }; > > /* > @@ -475,4 +488,10 @@ bool xfs_btree_sblock_verify(struct xfs_buf *bp, unsigned int max_recs); > uint xfs_btree_compute_maxlevels(struct xfs_mount *mp, uint *limits, > unsigned long len); > > +void xfs_btree_get_leaf_keys(struct xfs_btree_cur *cur, > + struct xfs_btree_block *block, union xfs_btree_key *key); > +void xfs_btree_get_node_keys(struct xfs_btree_cur *cur, > + struct xfs_btree_block *block, union xfs_btree_key *key); > +int xfs_btree_update_keys(struct xfs_btree_cur *cur, int level); > + > #endif /* __XFS_BTREE_H__ */ > diff --git a/fs/xfs/libxfs/xfs_ialloc_btree.c b/fs/xfs/libxfs/xfs_ialloc_btree.c > index 88da2ad..a48f448 100644 > --- a/fs/xfs/libxfs/xfs_ialloc_btree.c > +++ b/fs/xfs/libxfs/xfs_ialloc_btree.c > @@ -314,6 +314,10 @@ static const struct xfs_btree_ops xfs_inobt_ops = { > .keys_inorder = xfs_inobt_keys_inorder, > .recs_inorder = xfs_inobt_recs_inorder, > #endif > + > + .get_leaf_keys = xfs_btree_get_leaf_keys, > + .get_node_keys = xfs_btree_get_node_keys, > + .update_keys = xfs_btree_update_keys, > }; > > static const struct xfs_btree_ops xfs_finobt_ops = { > @@ -335,6 +339,10 @@ static const struct xfs_btree_ops xfs_finobt_ops = { > .keys_inorder = xfs_inobt_keys_inorder, > .recs_inorder = xfs_inobt_recs_inorder, > #endif > + > + .get_leaf_keys = xfs_btree_get_leaf_keys, > + .get_node_keys = xfs_btree_get_node_keys, > + .update_keys = xfs_btree_update_keys, > }; > > /* > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From chris@colorremedies.com Mon Aug 1 11:51:46 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 95B6E7D11 for ; Mon, 1 Aug 2016 11:51:46 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id F25CDAC003 for ; Mon, 1 Aug 2016 09:51:42 -0700 (PDT) X-ASG-Debug-ID: 1470070299-0bf57b369d2ee420001-NocioJ Received: from mail-oi0-f54.google.com (mail-oi0-f54.google.com [209.85.218.54]) by cuda.sgi.com with ESMTP id gUktkBCQbqORdXbv (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Mon, 01 Aug 2016 09:51:40 -0700 (PDT) X-Barracuda-Envelope-From: chris@colorremedies.com X-Barracuda-Effective-Source-IP: mail-oi0-f54.google.com[209.85.218.54] X-Barracuda-Apparent-Source-IP: 209.85.218.54 Received: by mail-oi0-f54.google.com with SMTP id l65so200435307oib.1 for ; Mon, 01 Aug 2016 09:51:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=colorremedies-com.20150623.gappssmtp.com; s=20150623; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to; bh=/r8+Pi8aW7R3DWsf8rkgniZoUm3gSU1R/f5IT3+slkg=; b=nmpQl3AP5CM4w37G23vSzNpM6Bq7aham72LdXmSUCdUw07AE5/K+GshBQS97lyq7jt 9zJB8O6QL1j2umlJzj8RHs32bfQnnmg52V3lpn2vMjXsnfdI5AQ+DgfGIO87amDK8YNa rE3QiE0bEWHq/9pOj1mxEhRgK4p4a3rMTwIsGJwwrRUu4OYlUk76n6Y2MxfEQ0oLp+no MLSJqkPdDaSxu18kuD2ItKCoW0wQzwwnzGadCetTX58Rk8Sibvc6OXLO9Pw+2ev2uW8C lg/U5U3da9LoN4TZhapbuVFCjf1LUBB5wjyJUygetEEJpUZshuRxFEUcHNaXrpJ23D32 sV/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to; bh=/r8+Pi8aW7R3DWsf8rkgniZoUm3gSU1R/f5IT3+slkg=; b=gZ8RRes012hqjyXQ3983YB2fMa+RK6NBLzet+NS5ZrM6Sw4jem5tfITOlkGbKtzLj3 spytkNTEiF9bKOs5Ik2+mgzNh/DQyBG6ai2W3ljDk9xMnN/Rau51zFMSmYsC7fyEhYMr OPxculoBVexa0SMa9kLfqEaQpu1kbrfwnbH7K5z48AZq8gKXiR1/t+UhaqguAjRRypqJ D3FMHLO8w1LpDmiwJpiIq1nKPOT7+SOlpwyFl7LjwfAlJKMS8UBaQP8pAY6sX1Yo0eub 0VHu4ZZDBluk8A5bn6DS5R8ZRpkEklFqMNMYcvlCUlYszsCbmEX+mEnEAj5vEYmu2ZMF 1aNA== X-Gm-Message-State: AEkoous8DdeslX/EBBmzPtludny3RK0lQZjGGaU8HcjrQVATszdB4AK13/sc4ITZ/hDgYwNiO29Qd68NQUDZ/A== X-Received: by 10.202.235.23 with SMTP id j23mr35260355oih.192.1470070299337; Mon, 01 Aug 2016 09:51:39 -0700 (PDT) MIME-Version: 1.0 Sender: chris@colorremedies.com Received: by 10.202.7.134 with HTTP; Mon, 1 Aug 2016 09:51:38 -0700 (PDT) X-Originating-IP: [69.7.127.116] In-Reply-To: <57CF7681619F42CCB4C0CF589E9686E5@dinulap> References: <4278AB9734C1445A8E48635B155149F8@dinulap> <20160729233524.GD16044@dastard> <57CF7681619F42CCB4C0CF589E9686E5@dinulap> From: Chris Murphy Date: Mon, 1 Aug 2016 10:51:38 -0600 X-Google-Sender-Auth: atVo2GPHnHHfstZFM7kbPHv8A2o Message-ID: Subject: Re: partition 100% full No space left on device. looks like xfs iscorrupted or a bug To: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: partition 100% full No space left on device. looks like xfs iscorrupted or a bug Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-oi0-f54.google.com[209.85.218.54] X-Barracuda-Start-Time: 1470070300 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 673 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31672 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Mon, Aug 1, 2016 at 6:00 AM, Lista Unx wrote: > Yes, I've created a new gmail account especially to be able to post to this > mailing list which is filtering very seriously legit messages comming from > legit usres, just because they are comming from yahoo accounts (servers) ... It's a Yahoo policy. It's completely reasonable for lists to reject yahoo.com emails, but ideally it'd reject them at signup time. https://help.yahoo.com/kb/SLN24050.html https://help.yahoo.com/kb/mail/SLN24016.html?impressions=true http://www.pcworld.com/article/2141120/yahoo-email-antispoofing-policy-breaks-mailing-lists.html -- Chris Murphy From darrick.wong@oracle.com Mon Aug 1 12:08:55 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 6F0977D1C for ; Mon, 1 Aug 2016 12:08:55 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 32F58304039 for ; Mon, 1 Aug 2016 10:08:52 -0700 (PDT) X-ASG-Debug-ID: 1470071329-0bf57c136a28f660001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id a7fKUfYGCgLlI5pw (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 01 Aug 2016 10:08:50 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: userp1040.oracle.com[156.151.31.81] 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 u71H8LWC002033 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 1 Aug 2016 17:08:22 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserv0021.oracle.com (8.13.8/8.13.8) with ESMTP id u71H8KrA013432 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 1 Aug 2016 17:08:21 GMT Received: from abhmp0001.oracle.com (abhmp0001.oracle.com [141.146.116.7]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id u71H8IT2014645; Mon, 1 Aug 2016 17:08:19 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 01 Aug 2016 10:08:16 -0700 Date: Mon, 1 Aug 2016 10:08:15 -0700 From: "Darrick J. Wong" To: Christoph Hellwig Cc: david@fromorbit.com, eguan@redhat.com, fstests@vger.kernel.org, linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 06/17] xfs: run xfs_repair at the end of each test Message-ID: <20160801170814.GA8590@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 06/17] xfs: run xfs_repair at the end of each test References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914481474.11762.2741429828012981240.stgit@birch.djwong.org> <20160801062719.GH596@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801062719.GH596@infradead.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: aserv0021.oracle.com [141.146.126.233] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1470071330 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 790 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31672 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Sun, Jul 31, 2016 at 11:27:19PM -0700, Christoph Hellwig wrote: > On Thu, Jul 21, 2016 at 04:46:54PM -0700, Darrick J. Wong wrote: > > Run xfs_repair twice at the end of each test -- once to rebuild > > the btree indices, and again with -n to check the rebuild work. > > This looks fine to me in general, but shouldn't we have specific > tests that test the rebuilding in a normal auto run? We do have specific tests that examine the outputs of rebuilding the indices (all the fuzzer group tests do this too); this patch enables a test runner to expand that coverage to all tests. Running a rebuilding xfs_repair for all the tests shook out some bugs in the xfs_repair rmap handling code that only triggered under some of the non-rmap non-reflink stressor tests. --D From darrick.wong@oracle.com Mon Aug 1 12:14:27 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 35C3C7D1F for ; Mon, 1 Aug 2016 12:14:27 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id EB722304048 for ; Mon, 1 Aug 2016 10:14:26 -0700 (PDT) X-ASG-Debug-ID: 1470071664-0bf57c1367290040001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id 7hPKnSIPyam6JYou (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 01 Aug 2016 10:14:25 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u71HDhqD031627 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 1 Aug 2016 17:13:44 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userv0022.oracle.com (8.14.4/8.13.8) with ESMTP id u71HDgwv002230 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 1 Aug 2016 17:13:43 GMT Received: from abhmp0015.oracle.com (abhmp0015.oracle.com [141.146.116.21]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id u71HDe8A022189; Mon, 1 Aug 2016 17:13:41 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 01 Aug 2016 10:13:40 -0700 Date: Mon, 1 Aug 2016 10:13:39 -0700 From: "Darrick J. Wong" To: Al Viro , Christoph Hellwig Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: [PATCH] vfs: fix return type of ioctl_file_dedupe_range Message-ID: <20160801171339.GB8590@birch.djwong.org> X-ASG-Orig-Subj: [PATCH] vfs: fix return type of ioctl_file_dedupe_range MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1470071664 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 725 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31673 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines All the VFS functions in the dedupe ioctl path return int status, so the ioctl handler ought to as well. Found by Coverity, CID 1350952. Signed-off-by: Darrick J. Wong --- fs/ioctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/ioctl.c b/fs/ioctl.c index 116a333..db3d033 100644 --- a/fs/ioctl.c +++ b/fs/ioctl.c @@ -568,7 +568,7 @@ static int ioctl_fsthaw(struct file *filp) return thaw_super(sb); } -static long ioctl_file_dedupe_range(struct file *file, void __user *arg) +static int ioctl_file_dedupe_range(struct file *file, void __user *arg) { struct file_dedupe_range __user *argp = arg; struct file_dedupe_range *same = NULL; From darrick.wong@oracle.com Mon Aug 1 12:34:11 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 185ED7D21 for ; Mon, 1 Aug 2016 12:34:11 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 84172AC002 for ; Mon, 1 Aug 2016 10:34:07 -0700 (PDT) X-ASG-Debug-ID: 1470072844-0bf57b369c2f0e20001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id Onk392a28ZcP5O0u (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 01 Aug 2016 10:34:05 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: userp1040.oracle.com[156.151.31.81] X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u71HXc6G001528 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 1 Aug 2016 17:33:39 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userv0022.oracle.com (8.14.4/8.13.8) with ESMTP id u71HXbnp032403 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 1 Aug 2016 17:33:37 GMT Received: from abhmp0001.oracle.com (abhmp0001.oracle.com [141.146.116.7]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id u71HXWWO032143; Mon, 1 Aug 2016 17:33:33 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 01 Aug 2016 10:33:32 -0700 Date: Mon, 1 Aug 2016 10:33:31 -0700 From: "Darrick J. Wong" To: Christoph Hellwig Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 07/47] xfs: add function pointers for get/update keys to the btree Message-ID: <20160801173331.GC8590@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 07/47] xfs: add function pointers for get/update keys to the btree References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907700604.25461.2181974283557088355.stgit@birch.djwong.org> <20160801063902.GI15590@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801063902.GI15590@infradead.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1470072845 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2068 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31673 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Sun, Jul 31, 2016 at 11:39:02PM -0700, Christoph Hellwig wrote: > On Wed, Jul 20, 2016 at 09:56:46PM -0700, Darrick J. Wong wrote: > > Add some function pointers to bc_ops to get the btree keys for > > leaf and node blocks, and to update parent keys of a block. > > Convert the _btree_updkey calls to use our new pointer, and > > modify the tree shape changing code to call the appropriate > > get_*_keys pointer instead of _btree_copy_keys because the > > overlapping btree has to calculate high key values. > > I don't really like to add ops for something that isn't really > per-btree type. Can you just add an overlapping flag and act based on > that? That's roughly the approach I took in previous versions of this patch, but using the OVERLAPPING flag to dispatch the overlapped vs. non- versions of the get*keys and updkey* functions confused Dave, so he asked me to add to function pointers[1] to the btree ops and dispatch that way. There are still a few places where we need to know if it's an overlapped btree (like when we update a block and have to update the high keys, which only applies to overlapped trees), so the flag didn't entirely go away. Now, one thing I could do differently is move those new function pointers to the btree cursor and add a xfs_btree_init_cursor() that checks the flag and sets the function pointers accordingly. It seems a little funny to me to be sprinking function pointers in both btree_cursor and btree_ops, but I suppose the flag is in the cursor, so having function pointers there too probably isn't so bad. That encapsulates some btree details so that each btree doesn't have to get them right, so I'll at least code this up and add it to the end of my -experimental tree. I'm not sure how far Dave has gotten in evaluating/fixing/whatever the for-next-for-4.8-2 tree to send to Linus, so I'll hold off on folding that fix into the existing patch unless Dave wants it for his second merge-window pull request. --D [1] https://www.spinics.net/lists/xfs/msg40870.html From dan.j.williams@intel.com Mon Aug 1 12:47:14 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 584407D1C for ; Mon, 1 Aug 2016 12:47:14 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 233C730405F for ; Mon, 1 Aug 2016 10:47:13 -0700 (PDT) X-ASG-Debug-ID: 1470073629-0bf57c1369291c00001-NocioJ Received: from mail-oi0-f41.google.com (mail-oi0-f41.google.com [209.85.218.41]) by cuda.sgi.com with ESMTP id yWI5A6diT3DrDeWm (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Mon, 01 Aug 2016 10:47:10 -0700 (PDT) X-Barracuda-Envelope-From: dan.j.williams@intel.com X-Barracuda-Effective-Source-IP: mail-oi0-f41.google.com[209.85.218.41] X-Barracuda-Apparent-Source-IP: 209.85.218.41 Received: by mail-oi0-f41.google.com with SMTP id j185so202330466oih.0 for ; Mon, 01 Aug 2016 10:47:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=dIpAbYq1k1eJ4I3bhhATt2czxxiJDnbMuNRn0Be46WA=; b=Gk8BRZW5SFluueFvF4Wja/p3mmaPdkZ1kGHk/07S4+aO5EiLs3akNznc4ENP9tb1bo nw5qEYF/cK/xeYv7xxmcr8JJzOjGECa9FC5vP5V8ZOLTmWDVyDazAWEaV9Nam60gM9Ss nMVQqBMbZy+SR0F881OGB/oOQEkpzn9jE04j0vpORWxUNZKIJQeaLT2NP4uPRS4mrAvT c6FYutE8q8+iwd8qQwpFDZ2XNdt1AHsBzeXbkbYT7FD8anJ9ecKHFEuB8SFB/OHY5jZ5 4hU49dsFyZYCikN7OCICuAtzok+LpPf1zdsZfayXc+Palhw2nYaG8vUMcDJhWIEe9NRN Ta6Q== 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:from:date :message-id:subject:to:cc; bh=dIpAbYq1k1eJ4I3bhhATt2czxxiJDnbMuNRn0Be46WA=; b=Mnn9CR/U8a69ReXFVQ62TbMxRUIkxhXejKqUB/76YB5pzKdS4ADkVb1AajywbrZ05+ c8kKN6rPxIdV1R222nyxgqC3nncXD6PLU8lJHfOAuLi6DAQVxNIpEthgT+S0JmpZoJJz 1Ao2xbKYtr3SuTqhOunfsXlsowVE3Pbg5z0uKu3ACRoZbGwz0NOnUaaOrYLvh2mNSaCh Kh0UgAgEJWsVxpmGX5ykDDdN/K65HWdklIOb3TqDLfm/9Qyt0O8B/7TVelbUDs/RoFd6 zn9ZJRa4TKoAwL0SMud483JL5SO3Yfzo2fKeW6v4ZhEz+FDmSwzNMkSM6AWOv2ySy9GT jaaA== X-Gm-Message-State: AEkooutFVsl9or2GKAJ3fbME89MXdy9rdhRuw4oZ0VB3mJtPhDQF8RyiK5X5jSykMZ2yhrae2ZORr2opXH66TYVK X-Received: by 10.202.190.2 with SMTP id o2mr23700416oif.81.1470073629383; Mon, 01 Aug 2016 10:47:09 -0700 (PDT) MIME-Version: 1.0 Received: by 10.157.62.182 with HTTP; Mon, 1 Aug 2016 10:47:08 -0700 (PDT) In-Reply-To: <20160730001249.GE16044@dastard> References: <20160727120745.GI6860@quack2.suse.cz> <20160727211039.GA20278@linux.intel.com> <20160727221949.GU16044@dastard> <20160728081033.GC4094@quack2.suse.cz> <20160729022152.GZ16044@dastard> <20160730001249.GE16044@dastard> From: Dan Williams Date: Mon, 1 Aug 2016 10:47:08 -0700 Message-ID: Subject: Re: Subtle races between DAX mmap fault and write path To: Dave Chinner X-ASG-Orig-Subj: Re: Subtle races between DAX mmap fault and write path Cc: Jan Kara , Ross Zwisler , linux-fsdevel , "linux-nvdimm@lists.01.org" , XFS Developers , linux-ext4 Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-oi0-f41.google.com[209.85.218.41] X-Barracuda-Start-Time: 1470073630 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 3802 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31674 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Fri, Jul 29, 2016 at 5:12 PM, Dave Chinner wrote: > On Fri, Jul 29, 2016 at 07:44:25AM -0700, Dan Williams wrote: >> On Thu, Jul 28, 2016 at 7:21 PM, Dave Chinner wrote: >> > On Thu, Jul 28, 2016 at 10:10:33AM +0200, Jan Kara wrote: >> >> On Thu 28-07-16 08:19:49, Dave Chinner wrote: >> [..] >> >> So DAX doesn't need flushing to maintain consistent view of the data but it >> >> does need flushing to make sure fsync(2) results in data written via mmap >> >> to reach persistent storage. >> > >> > I thought this all changed with the removal of the pcommit >> > instruction and wmb_pmem() going away. Isn't it now a platform >> > requirement now that dirty cache lines over persistent memory ranges >> > are either guaranteed to be flushed to persistent storage on power >> > fail or when required by REQ_FLUSH? >> >> No, nothing automates cache flushing. The path of a write is: >> >> cpu-cache -> cpu-write-buffer -> bus -> imc -> imc-write-buffer -> media >> >> The ADR mechanism and the wpq-flush facility flush data thorough the >> imc (integrated memory controller) to media. dax_do_io() gets writes >> to the imc, but we still need a posted-write-buffer flush mechanism to >> guarantee data makes it out to media. > > So what you are saying is that on and ADR machine, we have these > domains w.r.t. power fail: > > cpu-cache -> cpu-write-buffer -> bus -> imc -> imc-write-buffer -> media > > |-------------volatile-------------------|-----persistent--------------| > > because anything that gets to the IMC is guaranteed to be flushed to > stable media on power fail. > > But on a posted-write-buffer system, we have this: > > cpu-cache -> cpu-write-buffer -> bus -> imc -> imc-write-buffer -> media > > |-------------volatile-------------------------------------------|--persistent--| > > IOWs, only things already posted to the media via REQ_FLUSH are > considered stable on persistent media. What happens in this case > when power fails during a media update? Incomplete writes? > >> > Or have we somehow ended up with the fucked up situation where >> > dax_do_io() writes are (effectively) immediately persistent and >> > untracked by internal infrastructure, whilst mmap() writes >> > require internal dirty tracking and fsync() to flush caches via >> > writeback? >> >> dax_do_io() writes are not immediately persistent. They bypass the >> cpu-cache and cpu-write-bufffer and are ready to be flushed to media >> by REQ_FLUSH or power-fail on an ADR system. > > IOWs, on an ADR system write is /effectively/ immediately persistent > because if power fails ADR guarantees it will be flushed to stable > media, while on a posted write system it is volatile and will be > lost. Right? > > If so, that's even worse than just having mmap/write behave > differently - now writes will behave differently depending on the > specific hardware installed. I think this makes it even more > important for the DAX code to hide this behaviour from the > fielsystems by treating everything as volatile. Sorry, I confused things above by implying that Linux will need to consider NVDIMM platforms without ADR. ADR is already required for present day NVDIMM platforms and that requirement continues. The explicit flushing allowed by REQ_FLUSH is an optional mechanism to backstop ADR, but is not required and will not be used as an alternative to ADR. See pages 21 and 22 of the latest driver writer's guide if you want more details [1]. Long story short, we should always consider writes that enter the persistence domain (movnt + sfence) as persistent regardless of the presence of WPQ-flush. [1]: http://pmem.io/documents/NVDIMM_DriverWritersGuide-July-2016.pdf From bfoster@redhat.com Mon Aug 1 12:47:25 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 2E7E77D1C for ; Mon, 1 Aug 2016 12:47:25 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id A4F6FAC001 for ; Mon, 1 Aug 2016 10:47:24 -0700 (PDT) X-ASG-Debug-ID: 1470073641-0bf8157e6d350eb0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id WWkCqa7OSVQsyrQF (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 01 Aug 2016 10:47:22 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C52843B70D; Mon, 1 Aug 2016 17:47:21 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-147.bos.redhat.com [10.18.41.147]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u71HlLqo020809; Mon, 1 Aug 2016 13:47:21 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id E69721225E2; Mon, 1 Aug 2016 13:47:19 -0400 (EDT) Date: Mon, 1 Aug 2016 13:47:19 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 08/47] xfs: support btrees with overlapping intervals for keys Message-ID: <20160801174719.GB64218@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 08/47] xfs: support btrees with overlapping intervals for keys References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907701258.25461.18255100969448497359.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907701258.25461.18255100969448497359.stgit@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Mon, 01 Aug 2016 17:47:21 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470073642 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 19199 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 20, 2016 at 09:56:52PM -0700, Darrick J. Wong wrote: > On a filesystem with both reflink and reverse mapping enabled, it's > possible to have multiple rmap records referring to the same blocks on > disk. When overlapping intervals are possible, querying a classic > btree to find all records intersecting a given interval is inefficient > because we cannot use the left side of the search interval to filter > out non-matching records the same way that we can use the existing > btree key to filter out records coming after the right side of the > search interval. This will become important once we want to use the > rmap btree to rebuild BMBTs, or implement the (future) fsmap ioctl. > > (For the non-overlapping case, we can perform such queries trivially > by starting at the left side of the interval and walking the tree > until we pass the right side.) > > Therefore, extend the btree code to come closer to supporting > intervals as a first-class record attribute. This involves widening > the btree node's key space to store both the lowest key reachable via > the node pointer (as the btree does now) and the highest key reachable > via the same pointer and teaching the btree modifying functions to > keep the highest-key records up to date. > > This behavior can be turned on via a new btree ops flag so that btrees > that cannot store overlapping intervals don't pay the overhead costs > in terms of extra code and disk format changes. > > v2: When we're deleting a record in a btree that supports overlapped > interval records and the deletion results in two btree blocks being > joined, we defer updating the high/low keys until after all possible > joining (at higher levels in the tree) have finished. At this point, > the btree pointers at all levels have been updated to remove the empty > blocks and we can update the low and high keys. > > When we're doing this, we must be careful to update the keys of all > node pointers up to the root instead of stopping at the first set of > keys that don't need updating. This is because it's possible for a > single deletion to cause joining of multiple levels of tree, and so > we need to update everything going back to the root. > > v3: Make diff_two_keys return < 0, 0, or > 0 if key1 is less than, > equal to, or greater than key2, respectively. This is consistent > with the rest of the kernel and the C library. Clarify some comments > and refactor the sibling_update function out of existence. Check the > return value of btree_updkeys(). > > v4: In btree_updkeys(), evaluate the force_all parameter before > running the key diff to avoid reading uninitialized memory when we're > forcing a key update. This happens when we've allocated an empty slot > at level N + 1 to point to a new block at level N and we're in the > process of filling out the new keys. > > v5: Move the overlapping flag to bc_flags, refactor the get/update keys > code, and let client btrees set a doublewide key length. > > Signed-off-by: Darrick J. Wong > --- > fs/xfs/libxfs/xfs_btree.c | 339 +++++++++++++++++++++++++++++++++++++++++++-- > fs/xfs/libxfs/xfs_btree.h | 30 ++++ > fs/xfs/xfs_trace.h | 36 +++++ > 3 files changed, 392 insertions(+), 13 deletions(-) > > > diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c > index 70d1c60..1881536 100644 > --- a/fs/xfs/libxfs/xfs_btree.c > +++ b/fs/xfs/libxfs/xfs_btree.c ... > @@ -1918,14 +2053,107 @@ xfs_btree_get_keys( > /* > * Decide if we need to update the parent keys of a btree block. For > * a standard btree this is only necessary if we're updating the first > - * record/key. > + * record/key. For an overlapping btree, we must always update the > + * keys because the highest key can be in any of the records or keys > + * in the block. > */ > static inline bool > xfs_btree_needs_key_update( > struct xfs_btree_cur *cur, > int ptr) > { > - return ptr == 1; > + return (cur->bc_flags & XFS_BTREE_OVERLAPPING) || ptr == 1; > +} > + > +/* > + * Update the low and high parent keys of the given level, progressing > + * towards the root. If force_all is false, stop if the keys for a given > + * level do not need updating. > + */ > +STATIC int > +__xfs_btree_updkeys( > + struct xfs_btree_cur *cur, > + int level, > + struct xfs_btree_block *block, > + struct xfs_buf *bp0, > + bool force_all) > +{ > + union xfs_btree_bigkey key; /* keys from current level */ > + union xfs_btree_key *lkey; /* keys from the next level up */ > + union xfs_btree_key *hkey; > + union xfs_btree_key *nlkey; /* keys from the next level up */ > + union xfs_btree_key *nhkey; > + struct xfs_buf *bp; > + int ptr; > + > + ASSERT(cur->bc_flags & XFS_BTREE_OVERLAPPING); > + > + /* Exit if there aren't any parent levels to update. */ > + if (level + 1 >= cur->bc_nlevels) > + return 0; > + > + trace_xfs_btree_updkeys(cur, level, bp0); > + > + lkey = (union xfs_btree_key *)&key; > + hkey = xfs_btree_high_key_from_key(cur, lkey); So we create a bigkey object on the stack which presumably will contain storage for both keys for overlapping trees, then cast and pass down the normal xfs_btree_key structure throughout btree infrastructure. This seems slightly hairy/unfortunate in that we treat in-memory objects sort of like a buffer pointer. As hch points out, it is also kind of confusing (I had to skip forward to where the bigkey union was filled in to get an idea of what was going on). I'm not a huge fan, though I suppose the alternative might involve changing xfs_btree_key and possibly a bunch of other code to accommodate the dual keys model. Perhaps this is in fact the better option.. but have you considered any options enough to comment on that at all? > + xfs_btree_get_keys(cur, block, lkey); > + for (level++; level < cur->bc_nlevels; level++) { > +#ifdef DEBUG > + int error; > +#endif > + block = xfs_btree_get_block(cur, level, &bp); > + trace_xfs_btree_updkeys(cur, level, bp); > +#ifdef DEBUG > + error = xfs_btree_check_block(cur, block, level, bp); > + if (error) { > + XFS_BTREE_TRACE_CURSOR(cur, XBT_ERROR); > + return error; > + } > +#endif > + ptr = cur->bc_ptrs[level]; > + nlkey = xfs_btree_key_addr(cur, ptr, block); > + nhkey = xfs_btree_high_key_addr(cur, ptr, block); > + if (!force_all && > + !(cur->bc_ops->diff_two_keys(cur, nlkey, lkey) != 0 || > + cur->bc_ops->diff_two_keys(cur, nhkey, hkey) != 0)) > + break; > + xfs_btree_copy_keys(cur, nlkey, lkey, 1); > + xfs_btree_log_keys(cur, bp, ptr, ptr); > + if (level + 1 >= cur->bc_nlevels) > + break; > + cur->bc_ops->get_node_keys(cur, block, lkey); > + } > + > + return 0; > +} > + ... > } > > /* ... > @@ -2197,10 +2429,33 @@ xfs_btree_lshift( > rkp = &key; > } > > + /* > + * Using a temporary cursor, update the parent key values of the > + * block on the left. > + */ > + error = xfs_btree_dup_cursor(cur, &tcur); > + if (error) > + goto error0; > + i = xfs_btree_firstrec(tcur, level); > + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, error0); Nit: tcur > + > + error = xfs_btree_decrement(tcur, level, &i); > + if (error) > + goto error1; > + Can we conditionalize tcur creation/processing against the overlapping flag as well and combine the two associated hunks? Brian > /* Update the parent keys of the right block. */ > error = cur->bc_ops->update_keys(cur, level); > if (error) > - goto error0; > + goto error1; > + > + /* Update the parent high keys of the left block, if needed. */ > + if (tcur->bc_flags & XFS_BTREE_OVERLAPPING) { > + error = tcur->bc_ops->update_keys(tcur, level); > + if (error) > + goto error1; > + } > + > + xfs_btree_del_cursor(tcur, XFS_BTREE_NOERROR); > > /* Slide the cursor value left one. */ > cur->bc_ptrs[level]--; > @@ -2217,6 +2472,11 @@ out0: > error0: > XFS_BTREE_TRACE_CURSOR(cur, XBT_ERROR); > return error; > + > +error1: > + XFS_BTREE_TRACE_CURSOR(tcur, XBT_ERROR); > + xfs_btree_del_cursor(tcur, XFS_BTREE_ERROR); > + return error; > } > > /* > @@ -2369,6 +2629,13 @@ xfs_btree_rshift( > if (error) > goto error1; > > + /* Update the parent high keys of the left block, if needed. */ > + if (cur->bc_flags & XFS_BTREE_OVERLAPPING) { > + error = cur->bc_ops->update_keys(cur, level); > + if (error) > + goto error1; > + } > + > /* Update the parent keys of the right block. */ > error = cur->bc_ops->update_keys(tcur, level); > if (error) > @@ -2549,6 +2816,14 @@ __xfs_btree_split( > xfs_btree_set_sibling(cur, rrblock, &rptr, XFS_BB_LEFTSIB); > xfs_btree_log_block(cur, rrbp, XFS_BB_LEFTSIB); > } > + > + /* Update the parent high keys of the left block, if needed. */ > + if (cur->bc_flags & XFS_BTREE_OVERLAPPING) { > + error = cur->bc_ops->update_keys(cur, level); > + if (error) > + goto error0; > + } > + > /* > * If the cursor is really in the right block, move it there. > * If it's just pointing past the last entry in left, then we'll > @@ -2989,7 +3264,8 @@ xfs_btree_insrec( > struct xfs_buf *bp; /* buffer for block */ > union xfs_btree_ptr nptr; /* new block ptr */ > struct xfs_btree_cur *ncur; /* new btree cursor */ > - union xfs_btree_key nkey; /* new block key */ > + union xfs_btree_bigkey nkey; /* new block key */ > + union xfs_btree_key *lkey; > int optr; /* old key/record index */ > int ptr; /* key/record index */ > int numrecs;/* number of records */ > @@ -2997,11 +3273,13 @@ xfs_btree_insrec( > #ifdef DEBUG > int i; > #endif > + xfs_daddr_t old_bn; > > XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY); > XFS_BTREE_TRACE_ARGIPR(cur, level, *ptrp, &rec); > > ncur = NULL; > + lkey = (union xfs_btree_key *)&nkey; > > /* > * If we have an external root pointer, and we've made it to the > @@ -3030,6 +3308,7 @@ xfs_btree_insrec( > > /* Get pointers to the btree buffer and block. */ > block = xfs_btree_get_block(cur, level, &bp); > + old_bn = bp ? bp->b_bn : XFS_BUF_DADDR_NULL; > numrecs = xfs_btree_get_numrecs(block); > > #ifdef DEBUG > @@ -3056,7 +3335,7 @@ xfs_btree_insrec( > xfs_btree_set_ptr_null(cur, &nptr); > if (numrecs == cur->bc_ops->get_maxrecs(cur, level)) { > error = xfs_btree_make_block_unfull(cur, level, numrecs, > - &optr, &ptr, &nptr, &ncur, &nkey, stat); > + &optr, &ptr, &nptr, &ncur, lkey, stat); > if (error || *stat == 0) > goto error0; > } > @@ -3141,8 +3420,17 @@ xfs_btree_insrec( > /* Log the new number of records in the btree header. */ > xfs_btree_log_block(cur, bp, XFS_BB_NUMRECS); > > - /* If we inserted at the start of a block, update the parents' keys. */ > - if (xfs_btree_needs_key_update(cur, optr)) { > + /* > + * If we just inserted into a new tree block, we have to > + * recalculate nkey here because nkey is out of date. > + * > + * Otherwise we're just updating an existing block (having shoved > + * some records into the new tree block), so use the regular key > + * update mechanism. > + */ > + if (bp && bp->b_bn != old_bn) { > + xfs_btree_get_keys(cur, block, lkey); > + } else if (xfs_btree_needs_key_update(cur, optr)) { > error = cur->bc_ops->update_keys(cur, level); > if (error) > goto error0; > @@ -3163,7 +3451,7 @@ xfs_btree_insrec( > */ > *ptrp = nptr; > if (!xfs_btree_ptr_is_null(cur, &nptr)) { > - xfs_btree_copy_keys(cur, key, &nkey, 1); > + xfs_btree_copy_keys(cur, key, lkey, 1); > *curp = ncur; > } > > @@ -3194,18 +3482,20 @@ xfs_btree_insert( > union xfs_btree_ptr nptr; /* new block number (split result) */ > struct xfs_btree_cur *ncur; /* new cursor (split result) */ > struct xfs_btree_cur *pcur; /* previous level's cursor */ > - union xfs_btree_key key; /* key of block to insert */ > + union xfs_btree_bigkey bkey; /* key of block to insert */ > + union xfs_btree_key *key; > union xfs_btree_rec rec; /* record to insert */ > > level = 0; > ncur = NULL; > pcur = cur; > + key = (union xfs_btree_key *)&bkey; > > xfs_btree_set_ptr_null(cur, &nptr); > > /* Make a key out of the record data to be inserted, and save it. */ > cur->bc_ops->init_rec_from_cur(cur, &rec); > - cur->bc_ops->init_key_from_rec(&key, &rec); > + cur->bc_ops->init_key_from_rec(key, &rec); > > /* > * Loop going up the tree, starting at the leaf level. > @@ -3217,7 +3507,7 @@ xfs_btree_insert( > * Insert nrec/nptr into this level of the tree. > * Note if we fail, nptr will be null. > */ > - error = xfs_btree_insrec(pcur, level, &nptr, &rec, &key, > + error = xfs_btree_insrec(pcur, level, &nptr, &rec, key, > &ncur, &i); > if (error) { > if (pcur != cur) > @@ -3916,6 +4206,16 @@ xfs_btree_delrec( > if (level > 0) > cur->bc_ptrs[level]--; > > + /* > + * We combined blocks, so we have to update the parent keys if the > + * btree supports overlapped intervals. However, bc_ptrs[level + 1] > + * points to the old block so that the caller knows which record to > + * delete. Therefore, the caller must be savvy enough to call updkeys > + * for us if we return stat == 2. The other exit points from this > + * function don't require deletions further up the tree, so they can > + * call updkeys directly. > + */ > + > XFS_BTREE_TRACE_CURSOR(cur, XBT_EXIT); > /* Return value means the next level up has something to do. */ > *stat = 2; > @@ -3941,6 +4241,7 @@ xfs_btree_delete( > int error; /* error return value */ > int level; > int i; > + bool joined = false; > > XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY); > > @@ -3954,6 +4255,18 @@ xfs_btree_delete( > error = xfs_btree_delrec(cur, level, &i); > if (error) > goto error0; > + if (i == 2) > + joined = true; > + } > + > + /* > + * If we combined blocks as part of deleting the record, delrec won't > + * have updated the parent high keys so we have to do that here. > + */ > + if (joined && (cur->bc_flags & XFS_BTREE_OVERLAPPING)) { > + error = xfs_btree_updkeys_force(cur, 0); > + if (error) > + goto error0; > } > > if (i == 0) { > diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h > index bb40457..3645d91 100644 > --- a/fs/xfs/libxfs/xfs_btree.h > +++ b/fs/xfs/libxfs/xfs_btree.h > @@ -44,6 +44,20 @@ union xfs_btree_key { > xfs_inobt_key_t inobt; > }; > > +/* > + * In-core key that holds both low and high keys for overlapped btrees. > + * The two keys are packed next to each other on disk, so do the same > + * in memory. Preserve the existing xfs_btree_key as a single key to > + * avoid the mental model breakage that would happen if we passed a > + * bigkey into a function that operates on a single key. > + */ > +union xfs_btree_bigkey { > + struct xfs_bmbt_key bmbt; > + xfs_bmdr_key_t bmbr; /* bmbt root block */ > + xfs_alloc_key_t alloc; > + struct xfs_inobt_key inobt; > +}; > + > union xfs_btree_rec { > xfs_bmbt_rec_t bmbt; > xfs_bmdr_rec_t bmbr; /* bmbt root block */ > @@ -162,11 +176,21 @@ struct xfs_btree_ops { > union xfs_btree_rec *rec); > void (*init_ptr_from_cur)(struct xfs_btree_cur *cur, > union xfs_btree_ptr *ptr); > + void (*init_high_key_from_rec)(union xfs_btree_key *key, > + union xfs_btree_rec *rec); > > /* difference between key value and cursor value */ > __int64_t (*key_diff)(struct xfs_btree_cur *cur, > union xfs_btree_key *key); > > + /* > + * Difference between key2 and key1 -- positive if key1 > key2, > + * negative if key1 < key2, and zero if equal. > + */ > + __int64_t (*diff_two_keys)(struct xfs_btree_cur *cur, > + union xfs_btree_key *key1, > + union xfs_btree_key *key2); > + > const struct xfs_buf_ops *buf_ops; > > #if defined(DEBUG) || defined(XFS_WARN) > @@ -249,6 +273,7 @@ typedef struct xfs_btree_cur > #define XFS_BTREE_ROOT_IN_INODE (1<<1) /* root may be variable size */ > #define XFS_BTREE_LASTREC_UPDATE (1<<2) /* track last rec externally */ > #define XFS_BTREE_CRC_BLOCKS (1<<3) /* uses extended btree blocks */ > +#define XFS_BTREE_OVERLAPPING (1<<4) /* overlapping intervals */ > > > #define XFS_BTREE_NOERROR 0 > @@ -493,5 +518,10 @@ void xfs_btree_get_leaf_keys(struct xfs_btree_cur *cur, > void xfs_btree_get_node_keys(struct xfs_btree_cur *cur, > struct xfs_btree_block *block, union xfs_btree_key *key); > int xfs_btree_update_keys(struct xfs_btree_cur *cur, int level); > +void xfs_btree_get_leaf_keys_overlapped(struct xfs_btree_cur *cur, > + struct xfs_btree_block *block, union xfs_btree_key *key); > +void xfs_btree_get_node_keys_overlapped(struct xfs_btree_cur *cur, > + struct xfs_btree_block *block, union xfs_btree_key *key); > +int xfs_btree_update_keys_overlapped(struct xfs_btree_cur *cur, int level); > > #endif /* __XFS_BTREE_H__ */ > diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h > index 1451690..8fb59e6 100644 > --- a/fs/xfs/xfs_trace.h > +++ b/fs/xfs/xfs_trace.h > @@ -38,6 +38,7 @@ struct xlog_recover_item; > struct xfs_buf_log_format; > struct xfs_inode_log_format; > struct xfs_bmbt_irec; > +struct xfs_btree_cur; > > DECLARE_EVENT_CLASS(xfs_attr_list_class, > TP_PROTO(struct xfs_attr_list_context *ctx), > @@ -2185,6 +2186,41 @@ DEFINE_DISCARD_EVENT(xfs_discard_toosmall); > DEFINE_DISCARD_EVENT(xfs_discard_exclude); > DEFINE_DISCARD_EVENT(xfs_discard_busy); > > +/* btree cursor events */ > +DECLARE_EVENT_CLASS(xfs_btree_cur_class, > + TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp), > + TP_ARGS(cur, level, bp), > + TP_STRUCT__entry( > + __field(dev_t, dev) > + __field(xfs_btnum_t, btnum) > + __field(int, level) > + __field(int, nlevels) > + __field(int, ptr) > + __field(xfs_daddr_t, daddr) > + ), > + TP_fast_assign( > + __entry->dev = cur->bc_mp->m_super->s_dev; > + __entry->btnum = cur->bc_btnum; > + __entry->level = level; > + __entry->nlevels = cur->bc_nlevels; > + __entry->ptr = cur->bc_ptrs[level]; > + __entry->daddr = bp ? bp->b_bn : -1; > + ), > + TP_printk("dev %d:%d btnum %d level %d/%d ptr %d daddr 0x%llx", > + MAJOR(__entry->dev), MINOR(__entry->dev), > + __entry->btnum, > + __entry->level, > + __entry->nlevels, > + __entry->ptr, > + (unsigned long long)__entry->daddr) > +) > + > +#define DEFINE_BTREE_CUR_EVENT(name) \ > +DEFINE_EVENT(xfs_btree_cur_class, name, \ > + TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp), \ > + TP_ARGS(cur, level, bp)) > +DEFINE_BTREE_CUR_EVENT(xfs_btree_updkeys); > + > #endif /* _TRACE_XFS_H */ > > #undef TRACE_INCLUDE_PATH > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From darrick.wong@oracle.com Mon Aug 1 12:54:16 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 EAA017D24 for ; Mon, 1 Aug 2016 12:54:16 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7F5AF304051 for ; Mon, 1 Aug 2016 10:54:16 -0700 (PDT) X-ASG-Debug-ID: 1470074053-0bf8157e6c351a10001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id wBeBZBhfHTjSYfpO (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 01 Aug 2016 10:54:13 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u71HsAeR020495 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 1 Aug 2016 17:54:11 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id u71HsAvU021273 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 1 Aug 2016 17:54:10 GMT Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id u71Hs9r6007793; Mon, 1 Aug 2016 17:54:09 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 01 Aug 2016 10:54:09 -0700 Date: Mon, 1 Aug 2016 10:54:07 -0700 From: "Darrick J. Wong" To: Brian Foster Cc: linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH v2 07/47] xfs: add function pointers for get/update keys to the btree Message-ID: <20160801175407.GA8593@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH v2 07/47] xfs: add function pointers for get/update keys to the btree References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907700604.25461.2181974283557088355.stgit@birch.djwong.org> <20160728194615.GA15746@birch.djwong.org> <20160801155736.GA64218@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801155736.GA64218@bfoster.bfoster> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1470074053 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 12488 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31674 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Mon, Aug 01, 2016 at 11:57:36AM -0400, Brian Foster wrote: > On Thu, Jul 28, 2016 at 12:46:15PM -0700, Darrick J. Wong wrote: > > Add some function pointers to bc_ops to get the btree keys for > > leaf and node blocks, and to update parent keys of a block. > > Convert the _btree_updkey calls to use our new pointer, and > > modify the tree shape changing code to call the appropriate > > get_*_keys pointer instead of _btree_copy_keys because the > > overlapping btree has to calculate high key values. > > > > Signed-off-by: Darrick J. Wong > > --- > > fs/xfs/libxfs/xfs_alloc_btree.c | 4 + > > fs/xfs/libxfs/xfs_bmap_btree.c | 4 + > > fs/xfs/libxfs/xfs_btree.c | 164 +++++++++++++++++++++++--------------- > > fs/xfs/libxfs/xfs_btree.h | 19 ++++ > > fs/xfs/libxfs/xfs_ialloc_btree.c | 8 ++ > > 5 files changed, 135 insertions(+), 64 deletions(-) > > > ... > > diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c > > index 8d8e362..405442d 100644 > > --- a/fs/xfs/libxfs/xfs_btree.c > > +++ b/fs/xfs/libxfs/xfs_btree.c > ... > > @@ -2146,11 +2194,10 @@ xfs_btree_lshift( > > */ > > cur->bc_ops->init_key_from_rec(&key, > > xfs_btree_rec_addr(cur, 1, right)); > > - rkp = &key; > > Sorry, I should have been more clear. I think this entire hunk (the > above key initialization and comment) is effectively dead. > > > } > > > > - /* Update the parent key values of right. */ > > - error = xfs_btree_updkey(cur, rkp, level + 1); > > + /* Update the parent keys of the right block. */ > > + error = cur->bc_ops->update_keys(cur, level); > > if (error) > > goto error0; > > > > @@ -2292,7 +2339,6 @@ xfs_btree_rshift( > > xfs_btree_log_recs(cur, rbp, 1, rrecs + 1); > > > > cur->bc_ops->init_key_from_rec(&key, rrp); > > - rkp = &key; > > Same here. key isn't used beyond this. > > I see that hch has some objections to the design here. FWIW, resolution > of that aside, and with the above fixes: Ah, right. "key" and its initializers can go away in both functions. I'll fix that and find out if Dave wants to take this (and the other fixes) for a 4.8 merge request, or just defer them until -rc2. --D > Reviewed-by: Brian Foster > > > > > ASSERT(cur->bc_ops->recs_inorder(cur, rrp, > > xfs_btree_rec_addr(cur, 2, right))); > > @@ -2321,7 +2367,8 @@ xfs_btree_rshift( > > if (error) > > goto error1; > > > > - error = xfs_btree_updkey(tcur, rkp, level + 1); > > + /* Update the parent keys of the right block. */ > > + error = cur->bc_ops->update_keys(tcur, level); > > if (error) > > goto error1; > > > > @@ -2422,6 +2469,11 @@ __xfs_btree_split( > > > > XFS_BTREE_STATS_ADD(cur, moves, rrecs); > > > > + /* Adjust numrecs for the later get_*_keys() calls. */ > > + lrecs -= rrecs; > > + xfs_btree_set_numrecs(left, lrecs); > > + xfs_btree_set_numrecs(right, xfs_btree_get_numrecs(right) + rrecs); > > + > > /* > > * Copy btree block entries from the left block over to the > > * new block, the right. Update the right block and log the > > @@ -2447,14 +2499,15 @@ __xfs_btree_split( > > } > > #endif > > > > + /* Copy the keys & pointers to the new block. */ > > xfs_btree_copy_keys(cur, rkp, lkp, rrecs); > > xfs_btree_copy_ptrs(cur, rpp, lpp, rrecs); > > > > xfs_btree_log_keys(cur, rbp, 1, rrecs); > > xfs_btree_log_ptrs(cur, rbp, 1, rrecs); > > > > - /* Grab the keys to the entries moved to the right block */ > > - xfs_btree_copy_keys(cur, key, rkp, 1); > > + /* Stash the keys of the new block for later insertion. */ > > + cur->bc_ops->get_node_keys(cur, right, key); > > } else { > > /* It's a leaf. Move records. */ > > union xfs_btree_rec *lrp; /* left record pointer */ > > @@ -2463,27 +2516,23 @@ __xfs_btree_split( > > lrp = xfs_btree_rec_addr(cur, src_index, left); > > rrp = xfs_btree_rec_addr(cur, 1, right); > > > > + /* Copy records to the new block. */ > > xfs_btree_copy_recs(cur, rrp, lrp, rrecs); > > xfs_btree_log_recs(cur, rbp, 1, rrecs); > > > > - cur->bc_ops->init_key_from_rec(key, > > - xfs_btree_rec_addr(cur, 1, right)); > > + /* Stash the keys of the new block for later insertion. */ > > + cur->bc_ops->get_leaf_keys(cur, right, key); > > } > > > > - > > /* > > * Find the left block number by looking in the buffer. > > - * Adjust numrecs, sibling pointers. > > + * Adjust sibling pointers. > > */ > > xfs_btree_get_sibling(cur, left, &rrptr, XFS_BB_RIGHTSIB); > > xfs_btree_set_sibling(cur, right, &rrptr, XFS_BB_RIGHTSIB); > > xfs_btree_set_sibling(cur, right, &lptr, XFS_BB_LEFTSIB); > > xfs_btree_set_sibling(cur, left, &rptr, XFS_BB_RIGHTSIB); > > > > - lrecs -= rrecs; > > - xfs_btree_set_numrecs(left, lrecs); > > - xfs_btree_set_numrecs(right, xfs_btree_get_numrecs(right) + rrecs); > > - > > xfs_btree_log_block(cur, rbp, XFS_BB_ALL_BITS); > > xfs_btree_log_block(cur, lbp, XFS_BB_NUMRECS | XFS_BB_RIGHTSIB); > > > > @@ -2802,6 +2851,7 @@ xfs_btree_new_root( > > bp = lbp; > > nptr = 2; > > } > > + > > /* Fill in the new block's btree header and log it. */ > > xfs_btree_init_block_cur(cur, nbp, cur->bc_nlevels, 2); > > xfs_btree_log_block(cur, nbp, XFS_BB_ALL_BITS); > > @@ -2810,19 +2860,24 @@ xfs_btree_new_root( > > > > /* Fill in the key data in the new root. */ > > if (xfs_btree_get_level(left) > 0) { > > - xfs_btree_copy_keys(cur, > > - xfs_btree_key_addr(cur, 1, new), > > - xfs_btree_key_addr(cur, 1, left), 1); > > - xfs_btree_copy_keys(cur, > > - xfs_btree_key_addr(cur, 2, new), > > - xfs_btree_key_addr(cur, 1, right), 1); > > + /* > > + * Get the keys for the left block's keys and put them directly > > + * in the parent block. Do the same for the right block. > > + */ > > + cur->bc_ops->get_node_keys(cur, left, > > + xfs_btree_key_addr(cur, 1, new)); > > + cur->bc_ops->get_node_keys(cur, right, > > + xfs_btree_key_addr(cur, 2, new)); > > } else { > > - cur->bc_ops->init_key_from_rec( > > - xfs_btree_key_addr(cur, 1, new), > > - xfs_btree_rec_addr(cur, 1, left)); > > - cur->bc_ops->init_key_from_rec( > > - xfs_btree_key_addr(cur, 2, new), > > - xfs_btree_rec_addr(cur, 1, right)); > > + /* > > + * Get the keys for the left block's records and put them > > + * directly in the parent block. Do the same for the right > > + * block. > > + */ > > + cur->bc_ops->get_leaf_keys(cur, left, > > + xfs_btree_key_addr(cur, 1, new)); > > + cur->bc_ops->get_leaf_keys(cur, right, > > + xfs_btree_key_addr(cur, 2, new)); > > } > > xfs_btree_log_keys(cur, nbp, 1, 2); > > > > @@ -2858,7 +2913,7 @@ xfs_btree_make_block_unfull( > > int *index, /* new tree index */ > > union xfs_btree_ptr *nptr, /* new btree ptr */ > > struct xfs_btree_cur **ncur, /* new btree cursor */ > > - union xfs_btree_key *key, /* key of new block */ > > + union xfs_btree_key *key, /* key of new block */ > > int *stat) > > { > > int error = 0; > > @@ -3086,8 +3141,8 @@ xfs_btree_insrec( > > xfs_btree_log_block(cur, bp, XFS_BB_NUMRECS); > > > > /* If we inserted at the start of a block, update the parents' keys. */ > > - if (optr == 1) { > > - error = xfs_btree_updkey(cur, key, level + 1); > > + if (xfs_btree_needs_key_update(cur, optr)) { > > + error = cur->bc_ops->update_keys(cur, level); > > if (error) > > goto error0; > > } > > @@ -3107,7 +3162,7 @@ xfs_btree_insrec( > > */ > > *ptrp = nptr; > > if (!xfs_btree_ptr_is_null(cur, &nptr)) { > > - *key = nkey; > > + xfs_btree_copy_keys(cur, key, &nkey, 1); > > *curp = ncur; > > } > > > > @@ -3386,8 +3441,6 @@ xfs_btree_delrec( > > struct xfs_buf *bp; /* buffer for block */ > > int error; /* error return value */ > > int i; /* loop counter */ > > - union xfs_btree_key key; /* storage for keyp */ > > - union xfs_btree_key *keyp = &key; /* passed to the next level */ > > union xfs_btree_ptr lptr; /* left sibling block ptr */ > > struct xfs_buf *lbp; /* left buffer pointer */ > > struct xfs_btree_block *left; /* left btree block */ > > @@ -3458,13 +3511,6 @@ xfs_btree_delrec( > > xfs_btree_log_keys(cur, bp, ptr, numrecs - 1); > > xfs_btree_log_ptrs(cur, bp, ptr, numrecs - 1); > > } > > - > > - /* > > - * If it's the first record in the block, we'll need to pass a > > - * key up to the next level (updkey). > > - */ > > - if (ptr == 1) > > - keyp = xfs_btree_key_addr(cur, 1, block); > > } else { > > /* It's a leaf. operate on records */ > > if (ptr < numrecs) { > > @@ -3473,16 +3519,6 @@ xfs_btree_delrec( > > -1, numrecs - ptr); > > xfs_btree_log_recs(cur, bp, ptr, numrecs - 1); > > } > > - > > - /* > > - * If it's the first record in the block, we'll need a key > > - * structure to pass up to the next level (updkey). > > - */ > > - if (ptr == 1) { > > - cur->bc_ops->init_key_from_rec(&key, > > - xfs_btree_rec_addr(cur, 1, block)); > > - keyp = &key; > > - } > > } > > > > /* > > @@ -3549,8 +3585,8 @@ xfs_btree_delrec( > > * If we deleted the leftmost entry in the block, update the > > * key values above us in the tree. > > */ > > - if (ptr == 1) { > > - error = xfs_btree_updkey(cur, keyp, level + 1); > > + if (xfs_btree_needs_key_update(cur, ptr)) { > > + error = cur->bc_ops->update_keys(cur, level); > > if (error) > > goto error0; > > } > > diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h > > index b4f3035..e097e60 100644 > > --- a/fs/xfs/libxfs/xfs_btree.h > > +++ b/fs/xfs/libxfs/xfs_btree.h > > @@ -180,6 +180,19 @@ struct xfs_btree_ops { > > union xfs_btree_rec *r1, > > union xfs_btree_rec *r2); > > #endif > > + > > + /* derive the low & high keys from the records in a leaf block */ > > + void (*get_leaf_keys)(struct xfs_btree_cur *cur, > > + struct xfs_btree_block *block, > > + union xfs_btree_key *key); > > + > > + /* derive the low & high keys from the keys in a node block */ > > + void (*get_node_keys)(struct xfs_btree_cur *cur, > > + struct xfs_btree_block *block, > > + union xfs_btree_key *key); > > + > > + /* update the parent keys of given btree level */ > > + int (*update_keys)(struct xfs_btree_cur *cur, int level); > > }; > > > > /* > > @@ -475,4 +488,10 @@ bool xfs_btree_sblock_verify(struct xfs_buf *bp, unsigned int max_recs); > > uint xfs_btree_compute_maxlevels(struct xfs_mount *mp, uint *limits, > > unsigned long len); > > > > +void xfs_btree_get_leaf_keys(struct xfs_btree_cur *cur, > > + struct xfs_btree_block *block, union xfs_btree_key *key); > > +void xfs_btree_get_node_keys(struct xfs_btree_cur *cur, > > + struct xfs_btree_block *block, union xfs_btree_key *key); > > +int xfs_btree_update_keys(struct xfs_btree_cur *cur, int level); > > + > > #endif /* __XFS_BTREE_H__ */ > > diff --git a/fs/xfs/libxfs/xfs_ialloc_btree.c b/fs/xfs/libxfs/xfs_ialloc_btree.c > > index 88da2ad..a48f448 100644 > > --- a/fs/xfs/libxfs/xfs_ialloc_btree.c > > +++ b/fs/xfs/libxfs/xfs_ialloc_btree.c > > @@ -314,6 +314,10 @@ static const struct xfs_btree_ops xfs_inobt_ops = { > > .keys_inorder = xfs_inobt_keys_inorder, > > .recs_inorder = xfs_inobt_recs_inorder, > > #endif > > + > > + .get_leaf_keys = xfs_btree_get_leaf_keys, > > + .get_node_keys = xfs_btree_get_node_keys, > > + .update_keys = xfs_btree_update_keys, > > }; > > > > static const struct xfs_btree_ops xfs_finobt_ops = { > > @@ -335,6 +339,10 @@ static const struct xfs_btree_ops xfs_finobt_ops = { > > .keys_inorder = xfs_inobt_keys_inorder, > > .recs_inorder = xfs_inobt_recs_inorder, > > #endif > > + > > + .get_leaf_keys = xfs_btree_get_leaf_keys, > > + .get_node_keys = xfs_btree_get_node_keys, > > + .update_keys = xfs_btree_update_keys, > > }; > > > > /* > > > > _______________________________________________ > > xfs mailing list > > xfs@oss.sgi.com > > http://oss.sgi.com/mailman/listinfo/xfs > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From darrick.wong@oracle.com Mon Aug 1 13:09:07 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 EC0FE7D28 for ; Mon, 1 Aug 2016 13:09:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id BD7AD304048 for ; Mon, 1 Aug 2016 11:09:03 -0700 (PDT) X-ASG-Debug-ID: 1470074940-0bf57b369d2f37c0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id enPZrOricQZNj1uX (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 01 Aug 2016 11:09:00 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: userp1040.oracle.com[156.151.31.81] X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u71I8XFN014597 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 1 Aug 2016 18:08:33 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0022.oracle.com (8.14.4/8.13.8) with ESMTP id u71I8Wd8011472 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 1 Aug 2016 18:08:33 GMT Received: from abhmp0016.oracle.com (abhmp0016.oracle.com [141.146.116.22]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id u71I8Qea005737; Mon, 1 Aug 2016 18:08:31 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 01 Aug 2016 11:08:20 -0700 Date: Mon, 1 Aug 2016 11:08:19 -0700 From: "Darrick J. Wong" To: Christoph Hellwig Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 38/47] xfs: create rmap update intent log items Message-ID: <20160801180819.GD8590@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 38/47] xfs: create rmap update intent log items References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907721624.25461.1280539951915485473.stgit@birch.djwong.org> <20160801071237.GO15590@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801071237.GO15590@infradead.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1470074940 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 10297 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31674 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Mon, Aug 01, 2016 at 12:12:37AM -0700, Christoph Hellwig wrote: > On Wed, Jul 20, 2016 at 10:00:16PM -0700, Darrick J. Wong wrote: > > Create rmap update intent/done log items to record redo information in > > the log. Because we need to roll transactions between updating the > > bmbt mapping and updating the reverse mapping, we also have to track > > the status of the metadata updates that will be recorded in the > > post-roll transactions, just in case we crash before committing the > > final transaction. This mechanism enables log recovery to finish what > > was already started. > > > > Signed-off-by: Darrick J. Wong > > Reviewed-by: Brian Foster > > There is absolutely no need to log the extent array in the rmap update > done item. We have always done this for the EFD, but if you look at it > it's not actually needed there either. I was aware that nothing ever used the extent array in the EFD and I've long wondered why it's even there. Fortunately it helps to have someone else say "nobody will ever use this, so don't go adding it for new redo items". :) I'll remove the extent arrays from the log update done items. --D > Something like the patch below (relative to your whole tree) will fix > this up and reduce the amount of data logged: > > diff --git a/fs/xfs/libxfs/xfs_log_format.h b/fs/xfs/libxfs/xfs_log_format.h > index a8d794d..a6eed43 100644 > --- a/fs/xfs/libxfs/xfs_log_format.h > +++ b/fs/xfs/libxfs/xfs_log_format.h > @@ -658,9 +658,8 @@ struct xfs_rui_log_format { > struct xfs_rud_log_format { > __uint16_t rud_type; /* rud log item type */ > __uint16_t rud_size; /* size of this item */ > - __uint32_t rud_nextents; /* # of extents freed */ > + __uint32_t __pad; > __uint64_t rud_rui_id; /* id of corresponding rui */ > - struct xfs_map_extent rud_extents[1]; /* array of extents rmapped */ > }; > > /* > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index e51fd2b..e8638fd 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -3482,9 +3482,7 @@ xlog_recover_rud_pass2( > struct xfs_ail *ailp = log->l_ailp; > > rud_formatp = item->ri_buf[0].i_addr; > - ASSERT(item->ri_buf[0].i_len == (sizeof(struct xfs_rud_log_format) + > - ((rud_formatp->rud_nextents - 1) * > - sizeof(struct xfs_map_extent)))); > + ASSERT(item->ri_buf[0].i_len == sizeof(struct xfs_rud_log_format)); > rui_id = rud_formatp->rud_rui_id; > > /* > diff --git a/fs/xfs/xfs_rmap_item.c b/fs/xfs/xfs_rmap_item.c > index 6d6cc3b..7e47432 100644 > --- a/fs/xfs/xfs_rmap_item.c > +++ b/fs/xfs/xfs_rmap_item.c > @@ -273,36 +273,13 @@ static inline struct xfs_rud_log_item *RUD_ITEM(struct xfs_log_item *lip) > } > > STATIC void > -xfs_rud_item_free(struct xfs_rud_log_item *rudp) > -{ > - if (rudp->rud_format.rud_nextents > XFS_RUD_MAX_FAST_EXTENTS) > - kmem_free(rudp); > - else > - kmem_zone_free(xfs_rud_zone, rudp); > -} > - > -/* > - * This returns the number of iovecs needed to log the given rud item. > - * We only need 1 iovec for an rud item. It just logs the rud_log_format > - * structure. > - */ > -static inline int > -xfs_rud_item_sizeof( > - struct xfs_rud_log_item *rudp) > -{ > - return sizeof(struct xfs_rud_log_format) + > - (rudp->rud_format.rud_nextents - 1) * > - sizeof(struct xfs_map_extent); > -} > - > -STATIC void > xfs_rud_item_size( > struct xfs_log_item *lip, > int *nvecs, > int *nbytes) > { > *nvecs += 1; > - *nbytes += xfs_rud_item_sizeof(RUD_ITEM(lip)); > + *nbytes += sizeof(struct xfs_rud_log_format); > } > > /* > @@ -320,13 +297,11 @@ xfs_rud_item_format( > struct xfs_rud_log_item *rudp = RUD_ITEM(lip); > struct xfs_log_iovec *vecp = NULL; > > - ASSERT(rudp->rud_next_extent == rudp->rud_format.rud_nextents); > - > rudp->rud_format.rud_type = XFS_LI_RUD; > rudp->rud_format.rud_size = 1; > > xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_RUD_FORMAT, &rudp->rud_format, > - xfs_rud_item_sizeof(rudp)); > + sizeof(struct xfs_rud_log_format)); > } > > /* > @@ -374,7 +349,7 @@ xfs_rud_item_unlock( > > if (lip->li_flags & XFS_LI_ABORTED) { > xfs_rui_release(rudp->rud_ruip); > - xfs_rud_item_free(rudp); > + kmem_zone_free(xfs_rud_zone, rudp); > } > } > > @@ -398,7 +373,7 @@ xfs_rud_item_committed( > * aborted due to log I/O error). > */ > xfs_rui_release(rudp->rud_ruip); > - xfs_rud_item_free(rudp); > + kmem_zone_free(xfs_rud_zone, rudp); > > return (xfs_lsn_t)-1; > } > @@ -437,25 +412,14 @@ static const struct xfs_item_ops xfs_rud_item_ops = { > struct xfs_rud_log_item * > xfs_rud_init( > struct xfs_mount *mp, > - struct xfs_rui_log_item *ruip, > - uint nextents) > + struct xfs_rui_log_item *ruip) > > { > struct xfs_rud_log_item *rudp; > - uint size; > - > - ASSERT(nextents > 0); > - if (nextents > XFS_RUD_MAX_FAST_EXTENTS) { > - size = (uint)(sizeof(struct xfs_rud_log_item) + > - ((nextents - 1) * sizeof(struct xfs_map_extent))); > - rudp = kmem_zalloc(size, KM_SLEEP); > - } else { > - rudp = kmem_zone_zalloc(xfs_rud_zone, KM_SLEEP); > - } > > + rudp = kmem_zone_zalloc(xfs_rud_zone, KM_SLEEP); > xfs_log_item_init(mp, &rudp->rud_item, XFS_LI_RUD, &xfs_rud_item_ops); > rudp->rud_ruip = ruip; > - rudp->rud_format.rud_nextents = nextents; > rudp->rud_format.rud_rui_id = ruip->rui_format.rui_id; > > return rudp; > @@ -523,7 +487,7 @@ xfs_rui_recover( > error = xfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate, 0, 0, 0, &tp); > if (error) > return error; > - rudp = xfs_trans_get_rud(tp, ruip, ruip->rui_format.rui_nextents); > + rudp = xfs_trans_get_rud(tp, ruip); > > for (i = 0; i < ruip->rui_format.rui_nextents; i++) { > rmap = &(ruip->rui_format.rui_extents[i]); > diff --git a/fs/xfs/xfs_rmap_item.h b/fs/xfs/xfs_rmap_item.h > index 59ef3ec..aefcc3a 100644 > --- a/fs/xfs/xfs_rmap_item.h > +++ b/fs/xfs/xfs_rmap_item.h > @@ -77,21 +77,15 @@ struct xfs_rui_log_item { > struct xfs_rud_log_item { > struct xfs_log_item rud_item; > struct xfs_rui_log_item *rud_ruip; > - uint rud_next_extent; > struct xfs_rud_log_format rud_format; > }; > > -/* > - * Max number of extents in fast allocation path. > - */ > -#define XFS_RUD_MAX_FAST_EXTENTS 16 > - > extern struct kmem_zone *xfs_rui_zone; > extern struct kmem_zone *xfs_rud_zone; > > struct xfs_rui_log_item *xfs_rui_init(struct xfs_mount *, uint); > struct xfs_rud_log_item *xfs_rud_init(struct xfs_mount *, > - struct xfs_rui_log_item *, uint); > + struct xfs_rui_log_item *); > int xfs_rui_copy_format(struct xfs_log_iovec *buf, > struct xfs_rui_log_format *dst_rui_fmt); > void xfs_rui_item_free(struct xfs_rui_log_item *); > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index 45773df..24ef83e 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -1770,9 +1770,7 @@ xfs_init_zones(void) > if (!xfs_icreate_zone) > goto out_destroy_ili_zone; > > - xfs_rud_zone = kmem_zone_init((sizeof(struct xfs_rud_log_item) + > - ((XFS_RUD_MAX_FAST_EXTENTS - 1) * > - sizeof(struct xfs_map_extent))), > + xfs_rud_zone = kmem_zone_init(sizeof(struct xfs_rud_log_item), > "xfs_rud_item"); > if (!xfs_rud_zone) > goto out_destroy_icreate_zone; > diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h > index bb4b84f..e2bf86a 100644 > --- a/fs/xfs/xfs_trans.h > +++ b/fs/xfs/xfs_trans.h > @@ -241,7 +241,7 @@ enum xfs_rmap_intent_type; > > void xfs_rmap_update_init_defer_op(void); > struct xfs_rud_log_item *xfs_trans_get_rud(struct xfs_trans *tp, > - struct xfs_rui_log_item *ruip, uint nextents); > + struct xfs_rui_log_item *ruip); > int xfs_trans_log_finish_rmap_update(struct xfs_trans *tp, > struct xfs_rud_log_item *rudp, enum xfs_rmap_intent_type type, > __uint64_t owner, int whichfork, xfs_fileoff_t startoff, > diff --git a/fs/xfs/xfs_trans_rmap.c b/fs/xfs/xfs_trans_rmap.c > index 8341476..35650d6 100644 > --- a/fs/xfs/xfs_trans_rmap.c > +++ b/fs/xfs/xfs_trans_rmap.c > @@ -129,29 +129,14 @@ xfs_trans_log_start_rmap_update( > xfs_trans_set_rmap_flags(rmap, type, whichfork, state); > } > > -/* > - * This routine is called to allocate an "rmap update done" > - * log item that will hold nextents worth of extents. The > - * caller must use all nextents extents, because we are not > - * flexible about this at all. > - */ > struct xfs_rud_log_item * > xfs_trans_get_rud( > struct xfs_trans *tp, > - struct xfs_rui_log_item *ruip, > - uint nextents) > + struct xfs_rui_log_item *ruip) > { > struct xfs_rud_log_item *rudp; > > - ASSERT(tp != NULL); > - ASSERT(nextents > 0); > - > - rudp = xfs_rud_init(tp->t_mountp, ruip, nextents); > - ASSERT(rudp != NULL); > - > - /* > - * Get a log_item_desc to point at the new item. > - */ > + rudp = xfs_rud_init(tp->t_mountp, ruip); > xfs_trans_add_item(tp, &rudp->rud_item); > return rudp; > } > @@ -174,8 +159,6 @@ xfs_trans_log_finish_rmap_update( > xfs_exntst_t state, > struct xfs_btree_cur **pcur) > { > - uint next_extent; > - struct xfs_map_extent *rmap; > int error; > > error = xfs_rmap_finish_one(tp, type, owner, whichfork, startoff, > @@ -191,16 +174,6 @@ xfs_trans_log_finish_rmap_update( > tp->t_flags |= XFS_TRANS_DIRTY; > rudp->rud_item.li_desc->lid_flags |= XFS_LID_DIRTY; > > - next_extent = rudp->rud_next_extent; > - ASSERT(next_extent < rudp->rud_format.rud_nextents); > - rmap = &(rudp->rud_format.rud_extents[next_extent]); > - rmap->me_owner = owner; > - rmap->me_startblock = startblock; > - rmap->me_startoff = startoff; > - rmap->me_len = blockcount; > - xfs_trans_set_rmap_flags(rmap, type, whichfork, state); > - rudp->rud_next_extent++; > - > return error; > } > > @@ -255,7 +228,7 @@ xfs_rmap_update_create_done( > void *intent, > unsigned int count) > { > - return xfs_trans_get_rud(tp, intent, count); > + return xfs_trans_get_rud(tp, intent); > } > > /* Process a deferred rmap update. */ From Anna.Schumaker@netapp.com Mon Aug 1 14:00:51 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 E26197D2A for ; Mon, 1 Aug 2016 14:00:51 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id B1C5D30405F for ; Mon, 1 Aug 2016 12:00:51 -0700 (PDT) X-ASG-Debug-ID: 1470078048-0bf57c136a296290001-NocioJ Received: from mx144.netapp.com (mx144.netapp.com [216.240.21.25]) by cuda.sgi.com with ESMTP id DgJYZdtxvljDPyNg (version=TLSv1.2 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 01 Aug 2016 12:00:49 -0700 (PDT) X-Barracuda-Envelope-From: Anna.Schumaker@netapp.com X-Barracuda-Effective-Source-IP: mx144.netapp.com[216.240.21.25] X-Barracuda-Apparent-Source-IP: 216.240.21.25 X-IronPort-AV: E=Sophos;i="5.28,456,1464678000"; d="scan'208";a="133567374" Received: from vmwexchts02-prd.hq.netapp.com ([10.122.105.23]) by mx144-out.netapp.com with ESMTP; 01 Aug 2016 12:00:45 -0700 Received: from smtp2.corp.netapp.com (10.57.159.114) by VMWEXCHTS02-PRD.hq.netapp.com (10.122.105.23) with Microsoft SMTP Server id 15.0.1210.3; Mon, 1 Aug 2016 12:00:39 -0700 Received: from gouda.nowheycreamery.com.hq.netapp.com ([10.63.234.159]) by smtp2.corp.netapp.com (8.13.1/8.13.1/NTAP-1.6) with ESMTP id u71J0hga025427; Mon, 1 Aug 2016 12:00:43 -0700 (PDT) From: Anna Schumaker To: CC: , Subject: [PATCH] xfs_io: Update man page for copy_range command Date: Mon, 1 Aug 2016 15:00:42 -0400 X-ASG-Orig-Subj: [PATCH] xfs_io: Update man page for copy_range command Message-ID: <20160801190042.8652-1-Anna.Schumaker@Netapp.com> X-Mailer: git-send-email 2.9.0 MIME-Version: 1.0 Content-Type: text/plain X-Barracuda-Connect: mx144.netapp.com[216.240.21.25] X-Barracuda-Start-Time: 1470078049 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1148 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31675 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Signed-off-by: Anna Schumaker --- man/man8/xfs_io.8 | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/man/man8/xfs_io.8 b/man/man8/xfs_io.8 index b0300bb..2c56f09 100644 --- a/man/man8/xfs_io.8 +++ b/man/man8/xfs_io.8 @@ -556,6 +556,39 @@ Print timing statistics in a condensed format. .TP .B \-q Do not print timing statistics at all. +.RE +.PD +.TP +.TP +.BI "copy_range [ -s " src_offset " ] [ -d " dst_offset " ] [ -l " length " ] src_file" +On filesystems that support the +.BR copy_file_range (2) +system call, copies data from the +.I src_file +into the open file. If +.IR src_offset , +.IR dst_offset , +and +.I length +are omitted the contents of src_file will be copied to the beginning of the +open file, overwriting any data already there. +.RS 1.0i +.PD 0 +.TP 0.4i +.B \-s +Copy data from +.I src_file +beginning from +.IR src_offset . +.TP +.B \-d +Copy data into the open file beginning at +.IR dst_offset . +.TP +.B \-l +Copy up to +.I length +bytes of data. .SH MEMORY MAPPED I/O COMMANDS .TP -- 2.9.0 From darrick.wong@oracle.com Mon Aug 1 14:12:04 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 819BA7D2D for ; Mon, 1 Aug 2016 14:12:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 01219AC002 for ; Mon, 1 Aug 2016 12:12:00 -0700 (PDT) X-ASG-Debug-ID: 1470078717-0bf8157e6b35aad0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id Z1IIk1r5BDrs7f8F (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 01 Aug 2016 12:11:58 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: userp1040.oracle.com[156.151.31.81] X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u71JBVnx001030 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 1 Aug 2016 19:11:31 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id u71JBVgO005820 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 1 Aug 2016 19:11:31 GMT Received: from abhmp0006.oracle.com (abhmp0006.oracle.com [141.146.116.12]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id u71JBS4H017324; Mon, 1 Aug 2016 19:11:29 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 01 Aug 2016 12:11:27 -0700 Date: Mon, 1 Aug 2016 12:11:26 -0700 From: "Darrick J. Wong" To: Christoph Hellwig Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 08/47] xfs: support btrees with overlapping intervals for keys Message-ID: <20160801191126.GE8590@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 08/47] xfs: support btrees with overlapping intervals for keys References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907701258.25461.18255100969448497359.stgit@birch.djwong.org> <20160801064818.GJ15590@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801064818.GJ15590@infradead.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: aserv0022.oracle.com [141.146.126.234] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1470078718 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 7324 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31675 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Sun, Jul 31, 2016 at 11:48:18PM -0700, Christoph Hellwig wrote: > > v2: When we're deleting a record in a btree that supports overlapped > > interval records and the deletion results in two btree blocks being > > joined, we defer updating the high/low keys until after all possible > > joining (at higher levels in the tree) have finished. At this point, > > the btree pointers at all levels have been updated to remove the empty > > blocks and we can update the low and high keys. > > > > When we're doing this, we must be careful to update the keys of all > > node pointers up to the root instead of stopping at the first set of > > keys that don't need updating. This is because it's possible for a > > single deletion to cause joining of multiple levels of tree, and so > > we need to update everything going back to the root. > > > > v3: Make diff_two_keys return < 0, 0, or > 0 if key1 is less than, > > equal to, or greater than key2, respectively. This is consistent > > with the rest of the kernel and the C library. Clarify some comments > > and refactor the sibling_update function out of existence. Check the > > return value of btree_updkeys(). > > The changelogs go below the "-- " marker so that they don't appear > in the git log. That is unless they actually are useful like this > one and should be merged into the actual patch description instead > of being worded incrementally. > > > +++ b/fs/xfs/libxfs/xfs_btree.c > > @@ -51,7 +51,6 @@ static const __uint32_t xfs_magics[2][XFS_BTNUM_MAX] = { > > #define xfs_btree_magic(cur) \ > > xfs_magics[!!((cur)->bc_flags & XFS_BTREE_CRC_BLOCKS)][cur->bc_btnum] > > > > - > > STATIC int /* error (0 or EFSCORRUPTED) */ > > xfs_btree_check_lblock( > > struct xfs_btree_cur *cur, /* btree cursor */ > > Random whitespace change that probably shouldn't be in the patch. Oops. > > @@ -428,6 +427,50 @@ xfs_btree_dup_cursor( > > * into a btree block (xfs_btree_*_offset) or return a pointer to the given > > * record, key or pointer (xfs_btree_*_addr). Note that all addressing > > * inside the btree block is done using indices starting at one, not zero! > > + * > > + * If XFS_BTREE_OVERLAPPING is set, then this btree supports keys containing > > And here we already have the flag I asked for in the last patch. I > think that should be enough to drop the new methods. (As I mentioned in a previous reply, I used to open code this: if (cur->bc_flags & XFS_BTREE_OVERLAPPING) xfs_btree_get_node_overlapped(...); else xfs_btree_get_node(...); but Dave prefers to dispatch this through function pointers so that the switching logic occurs in only one place.) > > +/* > > + * In-core key that holds both low and high keys for overlapped btrees. > > + * The two keys are packed next to each other on disk, so do the same > > + * in memory. Preserve the existing xfs_btree_key as a single key to > > + * avoid the mental model breakage that would happen if we passed a > > + * bigkey into a function that operates on a single key. > > + */ > > +union xfs_btree_bigkey { > > + struct xfs_bmbt_key bmbt; > > + xfs_bmdr_key_t bmbr; /* bmbt root block */ > > + xfs_alloc_key_t alloc; > > + struct xfs_inobt_key inobt; > > +}; > > I don't understand the purpose of this union at all, and the comment > seems misleading. Compared to union xfs_btree_key the only difference > seems to be that xfs_btree_bigkey is missing the > 'struct xfs_rmap_key rmap' member. How does that enable us to holds I think you might be missing a later patch, wherein we add the rmap stuff to the btree structures, which expands bigkey to look like this: union xfs_btree_bigkey { struct xfs_bmbt_key bmbt; xfs_bmdr_key_t bmbr; /* bmbt root block */ xfs_alloc_key_t alloc; struct xfs_inobt_key inobt; struct { struct xfs_rmap_key rmap; struct xfs_rmap_key rmap_hi; }; struct xfs_refcount_key refc; }; bigkey.rmap is the low key, bigkey.rmap_hi is the high key. None of the other btrees are overlapped, so they don't get a high key. > low and high keys? Also every single user seems to cast it to > xfs_btree_key which is a little odd and smells unsafe. On disk, the low and high keys of a pointer reside next to each other. The btree_split code wants to store the new block's keys somewhere so that the block can later be insrec'd into a higher btree level. It would be convenient if this incore storage could also store the two keys right next to each other so that we can memcpy key_len bytes from the temporary storage into the on-disk btree block and not have to special case that code. I thought about simply declaring an on-stack array of two union xfs_btree_keys. The array is big enough to contain both keys and eliminates the need for casting. On the other hand it's weird because the two keys have to be aligned to xfs_rmap_key boundaries, not xfs_btree_key, which means that the high key isn't necessarily stored in the second array element like the code would suggest. Then I thought about stuffing both low and high keys into xfs_rmap_key like so: struct xfs_rmap_key { __be32 rm_startblock; /* extent start block */ __be64 rm_owner; /* extent owner */ __be64 rm_offset; /* offset within the owner */ __be32 rm_hi_startblock; /* extent start block */ __be64 rm_hi_owner; /* extent owner */ __be64 rm_hi_offset; /* offset within the owner */ } __attribute__((packed)); But that was even uglier, because an overlapped btree has two keys associated with a pointer, not one gigantic key. It's also a non-starter because sometimes we want to be able to treat the high fields as a distinct key and then feed that key to the btree key handling functions; when we do this, the hi_ fields point past the end of the allotted space. The overlapped query range function and the btree scrubbers in later patches want to use high keys in this manner. So then there was this way: union xfs_btree_key { struct xfs_bmbt_key bmbt; xfs_bmdr_key_t bmbr; /* bmbt root block */ xfs_alloc_key_t alloc; struct xfs_inobt_key inobt; struct xfs_rmap_key rmap[2]; struct xfs_refcount_key refc; }; This gives us the storage we want and avoids casts, but it still doesn't fix the problem that sometimes we want to create a key pointer to just the high fields and treat that as a pointer. So I created the separate bigkey structure to get the storage size I wanted, and cast it to xfs_btree_key wherever it gets fed into the other parts of the btree code. It's smelly like you say, but at least we have a distinct type to help future us identify the three smelly places where we do this. What I really wanted to do instead of bigkey was this: struct xfs_btree_key *key = kmalloc(cur->bc_ops->key_len); ...except then we have a memory allocation. I don't have a problem with replacing the bigkey variables with two-element array and just living with the fact that the high key will not be found at key[1], but I worry that future me won't remember that subtlety. Whereas tracing the key pointers back to the bigkey on the stack is not subtle and even better the debugger correctly locates the high key contents. --D From darrick.wong@oracle.com Mon Aug 1 14:18:37 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C3BBF7D26 for ; Mon, 1 Aug 2016 14:18:37 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 97B838F8035 for ; Mon, 1 Aug 2016 12:18:34 -0700 (PDT) X-ASG-Debug-ID: 1470079110-0bf57c13682986f0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id B8TuqWgjalSRK294 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 01 Aug 2016 12:18:30 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: userp1040.oracle.com[156.151.31.81] X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u71JIRxY009909 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 1 Aug 2016 19:18:28 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id u71JIR9I015877 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 1 Aug 2016 19:18:27 GMT Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id u71JIQcj021980; Mon, 1 Aug 2016 19:18:26 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 01 Aug 2016 12:18:26 -0700 Date: Mon, 1 Aug 2016 12:18:25 -0700 From: "Darrick J. Wong" To: Brian Foster Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 08/47] xfs: support btrees with overlapping intervals for keys Message-ID: <20160801191825.GF8590@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 08/47] xfs: support btrees with overlapping intervals for keys References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907701258.25461.18255100969448497359.stgit@birch.djwong.org> <20160801174719.GB64218@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801174719.GB64218@bfoster.bfoster> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1470079110 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 20456 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31675 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Mon, Aug 01, 2016 at 01:47:19PM -0400, Brian Foster wrote: > On Wed, Jul 20, 2016 at 09:56:52PM -0700, Darrick J. Wong wrote: > > On a filesystem with both reflink and reverse mapping enabled, it's > > possible to have multiple rmap records referring to the same blocks on > > disk. When overlapping intervals are possible, querying a classic > > btree to find all records intersecting a given interval is inefficient > > because we cannot use the left side of the search interval to filter > > out non-matching records the same way that we can use the existing > > btree key to filter out records coming after the right side of the > > search interval. This will become important once we want to use the > > rmap btree to rebuild BMBTs, or implement the (future) fsmap ioctl. > > > > (For the non-overlapping case, we can perform such queries trivially > > by starting at the left side of the interval and walking the tree > > until we pass the right side.) > > > > Therefore, extend the btree code to come closer to supporting > > intervals as a first-class record attribute. This involves widening > > the btree node's key space to store both the lowest key reachable via > > the node pointer (as the btree does now) and the highest key reachable > > via the same pointer and teaching the btree modifying functions to > > keep the highest-key records up to date. > > > > This behavior can be turned on via a new btree ops flag so that btrees > > that cannot store overlapping intervals don't pay the overhead costs > > in terms of extra code and disk format changes. > > > > v2: When we're deleting a record in a btree that supports overlapped > > interval records and the deletion results in two btree blocks being > > joined, we defer updating the high/low keys until after all possible > > joining (at higher levels in the tree) have finished. At this point, > > the btree pointers at all levels have been updated to remove the empty > > blocks and we can update the low and high keys. > > > > When we're doing this, we must be careful to update the keys of all > > node pointers up to the root instead of stopping at the first set of > > keys that don't need updating. This is because it's possible for a > > single deletion to cause joining of multiple levels of tree, and so > > we need to update everything going back to the root. > > > > v3: Make diff_two_keys return < 0, 0, or > 0 if key1 is less than, > > equal to, or greater than key2, respectively. This is consistent > > with the rest of the kernel and the C library. Clarify some comments > > and refactor the sibling_update function out of existence. Check the > > return value of btree_updkeys(). > > > > v4: In btree_updkeys(), evaluate the force_all parameter before > > running the key diff to avoid reading uninitialized memory when we're > > forcing a key update. This happens when we've allocated an empty slot > > at level N + 1 to point to a new block at level N and we're in the > > process of filling out the new keys. > > > > v5: Move the overlapping flag to bc_flags, refactor the get/update keys > > code, and let client btrees set a doublewide key length. > > > > Signed-off-by: Darrick J. Wong > > --- > > fs/xfs/libxfs/xfs_btree.c | 339 +++++++++++++++++++++++++++++++++++++++++++-- > > fs/xfs/libxfs/xfs_btree.h | 30 ++++ > > fs/xfs/xfs_trace.h | 36 +++++ > > 3 files changed, 392 insertions(+), 13 deletions(-) > > > > > > diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c > > index 70d1c60..1881536 100644 > > --- a/fs/xfs/libxfs/xfs_btree.c > > +++ b/fs/xfs/libxfs/xfs_btree.c > ... > > @@ -1918,14 +2053,107 @@ xfs_btree_get_keys( > > /* > > * Decide if we need to update the parent keys of a btree block. For > > * a standard btree this is only necessary if we're updating the first > > - * record/key. > > + * record/key. For an overlapping btree, we must always update the > > + * keys because the highest key can be in any of the records or keys > > + * in the block. > > */ > > static inline bool > > xfs_btree_needs_key_update( > > struct xfs_btree_cur *cur, > > int ptr) > > { > > - return ptr == 1; > > + return (cur->bc_flags & XFS_BTREE_OVERLAPPING) || ptr == 1; > > +} > > + > > +/* > > + * Update the low and high parent keys of the given level, progressing > > + * towards the root. If force_all is false, stop if the keys for a given > > + * level do not need updating. > > + */ > > +STATIC int > > +__xfs_btree_updkeys( > > + struct xfs_btree_cur *cur, > > + int level, > > + struct xfs_btree_block *block, > > + struct xfs_buf *bp0, > > + bool force_all) > > +{ > > + union xfs_btree_bigkey key; /* keys from current level */ > > + union xfs_btree_key *lkey; /* keys from the next level up */ > > + union xfs_btree_key *hkey; > > + union xfs_btree_key *nlkey; /* keys from the next level up */ > > + union xfs_btree_key *nhkey; > > + struct xfs_buf *bp; > > + int ptr; > > + > > + ASSERT(cur->bc_flags & XFS_BTREE_OVERLAPPING); > > + > > + /* Exit if there aren't any parent levels to update. */ > > + if (level + 1 >= cur->bc_nlevels) > > + return 0; > > + > > + trace_xfs_btree_updkeys(cur, level, bp0); > > + > > + lkey = (union xfs_btree_key *)&key; > > + hkey = xfs_btree_high_key_from_key(cur, lkey); > > So we create a bigkey object on the stack which presumably will contain > storage for both keys for overlapping trees, then cast and pass down the > normal xfs_btree_key structure throughout btree infrastructure. > > This seems slightly hairy/unfortunate in that we treat in-memory objects > sort of like a buffer pointer. As hch points out, it is also kind of > confusing (I had to skip forward to where the bigkey union was filled in > to get an idea of what was going on). I'm not a huge fan, though I > suppose the alternative might involve changing xfs_btree_key and > possibly a bunch of other code to accommodate the dual keys model. > Perhaps this is in fact the better option.. but have you considered any > options enough to comment on that at all? I did, and braindumped my notes in a reply to hch's email. Please see that. > > + xfs_btree_get_keys(cur, block, lkey); > > + for (level++; level < cur->bc_nlevels; level++) { > > +#ifdef DEBUG > > + int error; > > +#endif > > + block = xfs_btree_get_block(cur, level, &bp); > > + trace_xfs_btree_updkeys(cur, level, bp); > > +#ifdef DEBUG > > + error = xfs_btree_check_block(cur, block, level, bp); > > + if (error) { > > + XFS_BTREE_TRACE_CURSOR(cur, XBT_ERROR); > > + return error; > > + } > > +#endif > > + ptr = cur->bc_ptrs[level]; > > + nlkey = xfs_btree_key_addr(cur, ptr, block); > > + nhkey = xfs_btree_high_key_addr(cur, ptr, block); > > + if (!force_all && > > + !(cur->bc_ops->diff_two_keys(cur, nlkey, lkey) != 0 || > > + cur->bc_ops->diff_two_keys(cur, nhkey, hkey) != 0)) > > + break; > > + xfs_btree_copy_keys(cur, nlkey, lkey, 1); > > + xfs_btree_log_keys(cur, bp, ptr, ptr); > > + if (level + 1 >= cur->bc_nlevels) > > + break; > > + cur->bc_ops->get_node_keys(cur, block, lkey); > > + } > > + > > + return 0; > > +} > > + > ... > > } > > > > /* > ... > > @@ -2197,10 +2429,33 @@ xfs_btree_lshift( > > rkp = &key; > > } > > > > + /* > > + * Using a temporary cursor, update the parent key values of the > > + * block on the left. > > + */ > > + error = xfs_btree_dup_cursor(cur, &tcur); > > + if (error) > > + goto error0; > > + i = xfs_btree_firstrec(tcur, level); > > + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, error0); > > Nit: tcur Will fix this and the same problem in rshift. > > + > > + error = xfs_btree_decrement(tcur, level, &i); > > + if (error) > > + goto error1; > > + > > Can we conditionalize tcur creation/processing against the overlapping > flag as well and combine the two associated hunks? Yes, I think so. --D > Brian > > > /* Update the parent keys of the right block. */ > > error = cur->bc_ops->update_keys(cur, level); > > if (error) > > - goto error0; > > + goto error1; > > + > > + /* Update the parent high keys of the left block, if needed. */ > > + if (tcur->bc_flags & XFS_BTREE_OVERLAPPING) { > > + error = tcur->bc_ops->update_keys(tcur, level); > > + if (error) > > + goto error1; > > + } > > + > > + xfs_btree_del_cursor(tcur, XFS_BTREE_NOERROR); > > > > /* Slide the cursor value left one. */ > > cur->bc_ptrs[level]--; > > @@ -2217,6 +2472,11 @@ out0: > > error0: > > XFS_BTREE_TRACE_CURSOR(cur, XBT_ERROR); > > return error; > > + > > +error1: > > + XFS_BTREE_TRACE_CURSOR(tcur, XBT_ERROR); > > + xfs_btree_del_cursor(tcur, XFS_BTREE_ERROR); > > + return error; > > } > > > > /* > > @@ -2369,6 +2629,13 @@ xfs_btree_rshift( > > if (error) > > goto error1; > > > > + /* Update the parent high keys of the left block, if needed. */ > > + if (cur->bc_flags & XFS_BTREE_OVERLAPPING) { > > + error = cur->bc_ops->update_keys(cur, level); > > + if (error) > > + goto error1; > > + } > > + > > /* Update the parent keys of the right block. */ > > error = cur->bc_ops->update_keys(tcur, level); > > if (error) > > @@ -2549,6 +2816,14 @@ __xfs_btree_split( > > xfs_btree_set_sibling(cur, rrblock, &rptr, XFS_BB_LEFTSIB); > > xfs_btree_log_block(cur, rrbp, XFS_BB_LEFTSIB); > > } > > + > > + /* Update the parent high keys of the left block, if needed. */ > > + if (cur->bc_flags & XFS_BTREE_OVERLAPPING) { > > + error = cur->bc_ops->update_keys(cur, level); > > + if (error) > > + goto error0; > > + } > > + > > /* > > * If the cursor is really in the right block, move it there. > > * If it's just pointing past the last entry in left, then we'll > > @@ -2989,7 +3264,8 @@ xfs_btree_insrec( > > struct xfs_buf *bp; /* buffer for block */ > > union xfs_btree_ptr nptr; /* new block ptr */ > > struct xfs_btree_cur *ncur; /* new btree cursor */ > > - union xfs_btree_key nkey; /* new block key */ > > + union xfs_btree_bigkey nkey; /* new block key */ > > + union xfs_btree_key *lkey; > > int optr; /* old key/record index */ > > int ptr; /* key/record index */ > > int numrecs;/* number of records */ > > @@ -2997,11 +3273,13 @@ xfs_btree_insrec( > > #ifdef DEBUG > > int i; > > #endif > > + xfs_daddr_t old_bn; > > > > XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY); > > XFS_BTREE_TRACE_ARGIPR(cur, level, *ptrp, &rec); > > > > ncur = NULL; > > + lkey = (union xfs_btree_key *)&nkey; > > > > /* > > * If we have an external root pointer, and we've made it to the > > @@ -3030,6 +3308,7 @@ xfs_btree_insrec( > > > > /* Get pointers to the btree buffer and block. */ > > block = xfs_btree_get_block(cur, level, &bp); > > + old_bn = bp ? bp->b_bn : XFS_BUF_DADDR_NULL; > > numrecs = xfs_btree_get_numrecs(block); > > > > #ifdef DEBUG > > @@ -3056,7 +3335,7 @@ xfs_btree_insrec( > > xfs_btree_set_ptr_null(cur, &nptr); > > if (numrecs == cur->bc_ops->get_maxrecs(cur, level)) { > > error = xfs_btree_make_block_unfull(cur, level, numrecs, > > - &optr, &ptr, &nptr, &ncur, &nkey, stat); > > + &optr, &ptr, &nptr, &ncur, lkey, stat); > > if (error || *stat == 0) > > goto error0; > > } > > @@ -3141,8 +3420,17 @@ xfs_btree_insrec( > > /* Log the new number of records in the btree header. */ > > xfs_btree_log_block(cur, bp, XFS_BB_NUMRECS); > > > > - /* If we inserted at the start of a block, update the parents' keys. */ > > - if (xfs_btree_needs_key_update(cur, optr)) { > > + /* > > + * If we just inserted into a new tree block, we have to > > + * recalculate nkey here because nkey is out of date. > > + * > > + * Otherwise we're just updating an existing block (having shoved > > + * some records into the new tree block), so use the regular key > > + * update mechanism. > > + */ > > + if (bp && bp->b_bn != old_bn) { > > + xfs_btree_get_keys(cur, block, lkey); > > + } else if (xfs_btree_needs_key_update(cur, optr)) { > > error = cur->bc_ops->update_keys(cur, level); > > if (error) > > goto error0; > > @@ -3163,7 +3451,7 @@ xfs_btree_insrec( > > */ > > *ptrp = nptr; > > if (!xfs_btree_ptr_is_null(cur, &nptr)) { > > - xfs_btree_copy_keys(cur, key, &nkey, 1); > > + xfs_btree_copy_keys(cur, key, lkey, 1); > > *curp = ncur; > > } > > > > @@ -3194,18 +3482,20 @@ xfs_btree_insert( > > union xfs_btree_ptr nptr; /* new block number (split result) */ > > struct xfs_btree_cur *ncur; /* new cursor (split result) */ > > struct xfs_btree_cur *pcur; /* previous level's cursor */ > > - union xfs_btree_key key; /* key of block to insert */ > > + union xfs_btree_bigkey bkey; /* key of block to insert */ > > + union xfs_btree_key *key; > > union xfs_btree_rec rec; /* record to insert */ > > > > level = 0; > > ncur = NULL; > > pcur = cur; > > + key = (union xfs_btree_key *)&bkey; > > > > xfs_btree_set_ptr_null(cur, &nptr); > > > > /* Make a key out of the record data to be inserted, and save it. */ > > cur->bc_ops->init_rec_from_cur(cur, &rec); > > - cur->bc_ops->init_key_from_rec(&key, &rec); > > + cur->bc_ops->init_key_from_rec(key, &rec); > > > > /* > > * Loop going up the tree, starting at the leaf level. > > @@ -3217,7 +3507,7 @@ xfs_btree_insert( > > * Insert nrec/nptr into this level of the tree. > > * Note if we fail, nptr will be null. > > */ > > - error = xfs_btree_insrec(pcur, level, &nptr, &rec, &key, > > + error = xfs_btree_insrec(pcur, level, &nptr, &rec, key, > > &ncur, &i); > > if (error) { > > if (pcur != cur) > > @@ -3916,6 +4206,16 @@ xfs_btree_delrec( > > if (level > 0) > > cur->bc_ptrs[level]--; > > > > + /* > > + * We combined blocks, so we have to update the parent keys if the > > + * btree supports overlapped intervals. However, bc_ptrs[level + 1] > > + * points to the old block so that the caller knows which record to > > + * delete. Therefore, the caller must be savvy enough to call updkeys > > + * for us if we return stat == 2. The other exit points from this > > + * function don't require deletions further up the tree, so they can > > + * call updkeys directly. > > + */ > > + > > XFS_BTREE_TRACE_CURSOR(cur, XBT_EXIT); > > /* Return value means the next level up has something to do. */ > > *stat = 2; > > @@ -3941,6 +4241,7 @@ xfs_btree_delete( > > int error; /* error return value */ > > int level; > > int i; > > + bool joined = false; > > > > XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY); > > > > @@ -3954,6 +4255,18 @@ xfs_btree_delete( > > error = xfs_btree_delrec(cur, level, &i); > > if (error) > > goto error0; > > + if (i == 2) > > + joined = true; > > + } > > + > > + /* > > + * If we combined blocks as part of deleting the record, delrec won't > > + * have updated the parent high keys so we have to do that here. > > + */ > > + if (joined && (cur->bc_flags & XFS_BTREE_OVERLAPPING)) { > > + error = xfs_btree_updkeys_force(cur, 0); > > + if (error) > > + goto error0; > > } > > > > if (i == 0) { > > diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h > > index bb40457..3645d91 100644 > > --- a/fs/xfs/libxfs/xfs_btree.h > > +++ b/fs/xfs/libxfs/xfs_btree.h > > @@ -44,6 +44,20 @@ union xfs_btree_key { > > xfs_inobt_key_t inobt; > > }; > > > > +/* > > + * In-core key that holds both low and high keys for overlapped btrees. > > + * The two keys are packed next to each other on disk, so do the same > > + * in memory. Preserve the existing xfs_btree_key as a single key to > > + * avoid the mental model breakage that would happen if we passed a > > + * bigkey into a function that operates on a single key. > > + */ > > +union xfs_btree_bigkey { > > + struct xfs_bmbt_key bmbt; > > + xfs_bmdr_key_t bmbr; /* bmbt root block */ > > + xfs_alloc_key_t alloc; > > + struct xfs_inobt_key inobt; > > +}; > > + > > union xfs_btree_rec { > > xfs_bmbt_rec_t bmbt; > > xfs_bmdr_rec_t bmbr; /* bmbt root block */ > > @@ -162,11 +176,21 @@ struct xfs_btree_ops { > > union xfs_btree_rec *rec); > > void (*init_ptr_from_cur)(struct xfs_btree_cur *cur, > > union xfs_btree_ptr *ptr); > > + void (*init_high_key_from_rec)(union xfs_btree_key *key, > > + union xfs_btree_rec *rec); > > > > /* difference between key value and cursor value */ > > __int64_t (*key_diff)(struct xfs_btree_cur *cur, > > union xfs_btree_key *key); > > > > + /* > > + * Difference between key2 and key1 -- positive if key1 > key2, > > + * negative if key1 < key2, and zero if equal. > > + */ > > + __int64_t (*diff_two_keys)(struct xfs_btree_cur *cur, > > + union xfs_btree_key *key1, > > + union xfs_btree_key *key2); > > + > > const struct xfs_buf_ops *buf_ops; > > > > #if defined(DEBUG) || defined(XFS_WARN) > > @@ -249,6 +273,7 @@ typedef struct xfs_btree_cur > > #define XFS_BTREE_ROOT_IN_INODE (1<<1) /* root may be variable size */ > > #define XFS_BTREE_LASTREC_UPDATE (1<<2) /* track last rec externally */ > > #define XFS_BTREE_CRC_BLOCKS (1<<3) /* uses extended btree blocks */ > > +#define XFS_BTREE_OVERLAPPING (1<<4) /* overlapping intervals */ > > > > > > #define XFS_BTREE_NOERROR 0 > > @@ -493,5 +518,10 @@ void xfs_btree_get_leaf_keys(struct xfs_btree_cur *cur, > > void xfs_btree_get_node_keys(struct xfs_btree_cur *cur, > > struct xfs_btree_block *block, union xfs_btree_key *key); > > int xfs_btree_update_keys(struct xfs_btree_cur *cur, int level); > > +void xfs_btree_get_leaf_keys_overlapped(struct xfs_btree_cur *cur, > > + struct xfs_btree_block *block, union xfs_btree_key *key); > > +void xfs_btree_get_node_keys_overlapped(struct xfs_btree_cur *cur, > > + struct xfs_btree_block *block, union xfs_btree_key *key); > > +int xfs_btree_update_keys_overlapped(struct xfs_btree_cur *cur, int level); > > > > #endif /* __XFS_BTREE_H__ */ > > diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h > > index 1451690..8fb59e6 100644 > > --- a/fs/xfs/xfs_trace.h > > +++ b/fs/xfs/xfs_trace.h > > @@ -38,6 +38,7 @@ struct xlog_recover_item; > > struct xfs_buf_log_format; > > struct xfs_inode_log_format; > > struct xfs_bmbt_irec; > > +struct xfs_btree_cur; > > > > DECLARE_EVENT_CLASS(xfs_attr_list_class, > > TP_PROTO(struct xfs_attr_list_context *ctx), > > @@ -2185,6 +2186,41 @@ DEFINE_DISCARD_EVENT(xfs_discard_toosmall); > > DEFINE_DISCARD_EVENT(xfs_discard_exclude); > > DEFINE_DISCARD_EVENT(xfs_discard_busy); > > > > +/* btree cursor events */ > > +DECLARE_EVENT_CLASS(xfs_btree_cur_class, > > + TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp), > > + TP_ARGS(cur, level, bp), > > + TP_STRUCT__entry( > > + __field(dev_t, dev) > > + __field(xfs_btnum_t, btnum) > > + __field(int, level) > > + __field(int, nlevels) > > + __field(int, ptr) > > + __field(xfs_daddr_t, daddr) > > + ), > > + TP_fast_assign( > > + __entry->dev = cur->bc_mp->m_super->s_dev; > > + __entry->btnum = cur->bc_btnum; > > + __entry->level = level; > > + __entry->nlevels = cur->bc_nlevels; > > + __entry->ptr = cur->bc_ptrs[level]; > > + __entry->daddr = bp ? bp->b_bn : -1; > > + ), > > + TP_printk("dev %d:%d btnum %d level %d/%d ptr %d daddr 0x%llx", > > + MAJOR(__entry->dev), MINOR(__entry->dev), > > + __entry->btnum, > > + __entry->level, > > + __entry->nlevels, > > + __entry->ptr, > > + (unsigned long long)__entry->daddr) > > +) > > + > > +#define DEFINE_BTREE_CUR_EVENT(name) \ > > +DEFINE_EVENT(xfs_btree_cur_class, name, \ > > + TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp), \ > > + TP_ARGS(cur, level, bp)) > > +DEFINE_BTREE_CUR_EVENT(xfs_btree_updkeys); > > + > > #endif /* _TRACE_XFS_H */ > > > > #undef TRACE_INCLUDE_PATH > > > > _______________________________________________ > > xfs mailing list > > xfs@oss.sgi.com > > http://oss.sgi.com/mailman/listinfo/xfs From david@fromorbit.com Mon Aug 1 19:29:51 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 24C367D31 for ; Mon, 1 Aug 2016 19:29:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 889C2AC002 for ; Mon, 1 Aug 2016 17:29:47 -0700 (PDT) X-ASG-Debug-ID: 1470097783-0bf57b369c317e30001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id PPZs6zRBnBY7BJBb for ; Mon, 01 Aug 2016 17:29:44 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Effective-Source-IP: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ak0PAGjon1d5LDjQEGdsb2JhbABcg0WBUoZxnSQDBoxfihmGFwQCAoE0TQEBAQEBAQcBAQEBAQEBATZAhF4BAQQBOhwjBQsIAxgJDBkPBSUDBxoTiCkHwQQBAQgCASQehUSFFYR/hRwFmTOOdY9JjDCDd4JjAxyBXioyh2wBAQE Received: from ppp121-44-56-208.lns20.syd4.internode.on.net (HELO dastard) ([121.44.56.208]) by ipmail04.adl6.internode.on.net with ESMTP; 02 Aug 2016 09:51:46 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1bUNSq-0003MP-MO; Tue, 02 Aug 2016 10:21:44 +1000 Date: Tue, 2 Aug 2016 10:21:44 +1000 From: Dave Chinner To: Boaz Harrosh Cc: Dan Williams , Jan Kara , "linux-nvdimm@lists.01.org" , XFS Developers , linux-fsdevel , linux-ext4 Subject: Re: Subtle races between DAX mmap fault and write path Message-ID: <20160802002144.GL16044@dastard> X-ASG-Orig-Subj: Re: Subtle races between DAX mmap fault and write path References: <20160727120745.GI6860@quack2.suse.cz> <20160727211039.GA20278@linux.intel.com> <20160727221949.GU16044@dastard> <20160728081033.GC4094@quack2.suse.cz> <20160729022152.GZ16044@dastard> <20160730001249.GE16044@dastard> <579F20D9.80107@plexistor.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <579F20D9.80107@plexistor.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1470097783 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 6774 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31681 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Mon, Aug 01, 2016 at 01:13:45PM +0300, Boaz Harrosh wrote: > On 07/30/2016 03:12 AM, Dave Chinner wrote: > <> > > > > If we track the dirty blocks from write in the radix tree like we > > for mmap, then we can just use a normal memcpy() in dax_do_io(), > > getting rid of the slow cache bypass that is currently run. Radix > > tree updates are much less expensive than a slow memcpy of large > > amounts of data, ad fsync can then take care of persistence, just > > like we do for mmap. > > > > No! > > mov_nt instructions, That "slow cache bypass that is currently run" above > is actually faster then cached writes by 20%, and if you add the dirty > tracking and cl_flush instructions it becomes x2 slower in the most > optimal case and 3 times slower in the DAX case. IOWs, we'd expect writing to a file with DAX to be faster than when buffered through the page cache and fsync()d, right? The numbers I get say otherwise. Filesystem on 8GB pmem block device: $ sudo mkfs.xfs -f /dev/pmem1 meta-data=/dev/pmem1 isize=512 agcount=4, agsize=524288 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=0, rmapbt=0, reflink=0 data = bsize=4096 blocks=2097152, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 Test command that writes 1GB to the filesystem: $ sudo time xfs_io -f -c "pwrite 0 1g" -c "sync" /mnt/scratch/foo wrote 1073741824/1073741824 bytes at offset 0 1 GiB, 262144 ops; 0:00:01.00 (880.040 MiB/sec and 225290.3317 ops/sec) 0.02user 1.13system 0:02.27elapsed 51%CPU (0avgtext+0avgdata 2344maxresident)k 0inputs+0outputs (0major+109minor)pagefaults 0swaps Results: pwrite B/W (MiB/s) runtime run no DAX DAX no DAX DAX 1 880.040 236.352 2.27s 4.34s 2 857.094 257.297 2.18s 3.99s 3 865.820 236.087 2.13s 4.34s It is quite clear that *DAX is much slower* than normal buffered IO through the page cache followed by a fsync(). Stop and think why that might be. We're only doing one copy with DAX, so why is the pwrite() speed 4x lower than for a copy into the page cache? We're not copying 4x the data here. We're copying it once. But there's another uncached write to each page during allocation to zero each block first, so we're actually doing two uncached writes to the page. And we're doing an allocation per page with DAX, whereas we're using delayed allocation in the buffered IO case which has much less overhead. The only thing we can do here to speed the DAX case up is do cached memcpy so that the data copy after zeroing runs at L1 cache speed (i.e. 50x faster than it currently does). Let's take the allocation out of it, eh? Let's do overwrite instead, fsync in the buffered Io case, no fsync for DAX: pwrite B/W (MiB/s) runtime run no DAX DAX no DAX DAX 1 1119 1125 1.85s 0.93s 2 1113 1121 1.83s 0.91s 3 1128 1078 1.80s 0.94s So, pwrite speeds are no different for DAX vs page cache IO. Also, now we can see the overhead of writeback - a second data copy to the pmem for the IO during fsync. If I take the fsync() away from the buffered IO, the runtime drops to 0.89-0.91s, which is identical to the DAX code. Given the DAX code has a short IO path than buffered IO, it's not showing any advantage speed for using uncached IO.... Let's go back to the allocation case, but this time take advantage of the new iomap based Io path in XFS to amortise the DAX allocation overhead by using a 16MB IO size instead of 4k: $ sudo time xfs_io -f -c "pwrite 0 1g -b 16m" -c sync /mnt/scratch/foo pwrite B/W (MiB/s) runtime run no DAX DAX no DAX DAX 1 1344 1028 1.63s 1.03s 2 1410 980 1.62s 1.06s 3 1399 1032 1.72s 0.99s So, pwrite bandwidth of the copy into the page cache is still much higher than that of the DAX path, but now the allocation overhead is minimised and hence the double copy in the buffered IO writeback path shows up. For completeness, lets just run the overwrite case here which is effectively just competing memcpy implementations, fsync for buffered, no fsync for DAX: pwrite B/W (MiB/s) runtime run no DAX DAX no DAX DAX 1 1791 1727 1.53s 0.59s 2 1768 1726 1.57s 0.59s 3 1799 1729 1.55s 0.59s Again, runtime shows the overhead of the double copy in the buffered IO/writeback path. It also shows the overhead in the DAX path of the allocation zeroing vs overwrite. If I drop the fsync from the buffered IO path, bandwidth remains the same but runtime drops to 0.55-0.57s, so again the buffered IO write path is faster than DAX while doing more work. IOws, the overhead of dirty page tracking in the page cache mapping tree is not significant in terms of write() performance. Hence I fail to see why it should be significant in the DAX path - it will probably have less overhead because we have less to account for in the DAX write path. The only performance penalty for dirty tracking is in the fsync writeback path itself, and that a separate issue for optimisation. Quite frankly, what I see here is that whatever optimisations that have been made to make DAX fast don't show any real world benefit. Further, the claims that dirty tracking has too much overhead are *completely shot down* by the fact that buffered write IO through the page cache is *faster* than the current DAX write IO path. > The network guys have noticed the mov_nt instructions superior > performance for years before we pushed DAX into the tree. look for > users of copy_from_iter_nocache and the comments when they where > introduced, those where used before DAX, and nothing at all to do > with persistence. > > So what you are suggesting is fine only 3 times slower in the current > implementation. What is optimal for one use case does not mean it is optimal for all. High level operation performance measurement disagrees with the assertion that we're using the *best* method of copying data in the DAX path available right now. Understand how data moves through the system, then optimise the data flow. What we are seeing here is that optimising for the fastest single data movement can result in lower overall performance where the code path requires multiple data movements to the same location.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From sheena.37@hoistring.com Mon Aug 1 19:40:09 2016 Return-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.9 required=5.0 tests=AXB_BODYMAIL_SBL112884, DATE_IN_PAST_12_24,FH_FROMEML_NOTLD,HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 24CED7D33 for ; Mon, 1 Aug 2016 19:40:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D2ED630405F for ; Mon, 1 Aug 2016 17:40:08 -0700 (PDT) X-ASG-Debug-ID: 1470098402-0bf8157e6b381300001-NocioJ Received: from hoistring.com (no-data [60.27.28.103]) by cuda.sgi.com with SMTP id EsU9ICjceJ2t3ZHq for ; Mon, 01 Aug 2016 17:40:03 -0700 (PDT) X-Barracuda-Envelope-From: sheena.37@hoistring.com X-Barracuda-Effective-Source-IP: no-data[60.27.28.103] X-Barracuda-Apparent-Source-IP: 60.27.28.103 Received: from ksbwyj[127.0.0.1] by KSBWYJ[127.0.0.1] (SMTPD32); Mon, 1 Aug 2016 16:42:30 +0800 From: "rigging1@yeah.net " Subject: 2016-08-01 16:42:30hoist ring factory To: xfs@oss.sgi.com X-ASG-Orig-Subj: 2016-08-01 16:42:30hoist ring factory MIME-Version: 1.0 Sender: sheena.37@hoistring.com Reply-To: rigging1@yeah.net Date: Mon, 1 Aug 2016 16:42:30 +0800 X-Mailer: Foxmail 6, 13, 102, 15 [cn] Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 Content-Disposition: inline X-Barracuda-Connect: no-data[60.27.28.103] X-Barracuda-Start-Time: 1470098402 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 875 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.46 X-Barracuda-Spam-Status: No, SCORE=1.46 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0713, DATE_IN_PAST_12_24, DATE_IN_PAST_12_24_2, HTML_MESSAGE, MIME_HTML_ONLY, MISSING_MID X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31682 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.01 DATE_IN_PAST_12_24 Date: is 12 to 24 hours before Received: date 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.80 DATE_IN_PAST_12_24_2 DATE_IN_PAST_12_24_2 0.50 BSF_SC0_MV0713 Custom rule MV0713 Message-Id: <20160802004008.8A257D80072@cuda.sgi.com> PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVU Ri04IiBodHRwLWVxdWl2PWNvbnRlbnQtdHlwZT4NCjxNRVRBIG5hbWU9R0VORVJBVE9SIGNvbnRl bnQ9Ik1TSFRNTCAxMS4wMC4xMDU4Ni4xNjIiPjwvSEVBRD4NCjxCT0RZPg0KPFA+SGksIHB1cmNo YXNpbmcgbWFuYWdlci48L1A+DQo8UD5Hb29kIGRheSE8L1A+DQo8UD5XZSBhcmUgaG9pc3Qgcmlu Zywgc3dpdmVsIGV5ZSBib2x0cyBhbmQgbGlmdGluZyBwb2ludCBtYW51ZmFjdHVyZXIsYW5kIHdl IA0KaGF2ZSByZXNlYXJjaGVkICZhbXA7IGRlc2lnbmVkIHNvbWUgbmV3IHByb2R1Y3QuPC9QPg0K PFA+SWYgeW91IGFyZSBpbnRlcmVzdGVkIGluLCBJICYjMzk7bGwgc2VuZCB5b3Ugb3VyIGNhdGFs b2d1ZS48L1A+DQo8UD5UaGFua3MgZm9yIHlvdXIgdmFsdWFibGUgdGltZS48L1A+DQo8UD5SZWdh cmRzLjwvUD4NCjxQPnNoZWVuYTwvUD4NCjxQPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LTwvUD4NCjxQPlNhbGVzIERlcGFydG1lbnQ8QlI+RS1tYWlsOnJpZ2dpbmcxQHllYWgubmV0PEJS PlNreXBlOnNoZWVuYS53YW5nMjAxMTxCUj5DZWxsIA0KcGhvbmU6MDA4Ni0xODYyMjg2MzYyMjxC Uj5UaWFuamluIFlpeXVuIFJpZ2dpbmcgQ28uLEx0ZDxCUj5BZGRyZXNzOiBOby43LCANClhpYW5n amlhbmcgUmluZyBSb2FkLCBEaXN0cmljdCBBLCBIb25nIEtvbmcgR2FyZGVuLCBEb25nbGkgRGV2 ZWxvcG1lbnQgWm9uZSANCixUaWFuamluLCBDaGluYTxCUj5aaXAgQ29kZTogMzAwMzAwPEJSPjwv UD48L0JPRFk+PC9IVE1MPg0KDQo= From mfasheh@suse.de Mon Aug 1 21:35:12 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 EA3827D33 for ; Mon, 1 Aug 2016 21:35:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id AF2E3304048 for ; Mon, 1 Aug 2016 19:35:12 -0700 (PDT) X-ASG-Debug-ID: 1470105308-0bf57b369c322c70001-NocioJ Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id Uq5sBaePRogjJwtK (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 01 Aug 2016 19:35:09 -0700 (PDT) X-Barracuda-Envelope-From: mfasheh@suse.de X-Barracuda-Effective-Source-IP: mx2.suse.de[195.135.220.15] 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 DD0EAAAF1; Tue, 2 Aug 2016 02:35:07 +0000 (UTC) Date: Mon, 1 Aug 2016 19:35:07 -0700 From: Mark Fasheh To: "Darrick J. Wong" Cc: Al Viro , linux-api@vger.kernel.org, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, "Kirill A. Shutemov" , Vlastimil Babka Subject: Re: [PATCH] vfs: cap dedupe request structure size at PAGE_SIZE Message-ID: <20160802023507.GH5316@wotan.suse.de> X-ASG-Orig-Subj: Re: [PATCH] vfs: cap dedupe request structure size at PAGE_SIZE Reply-To: Mark Fasheh References: <20160728183534.GB15753@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160728183534.GB15753@birch.djwong.org> Organization: SUSE Labs User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mx2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1470105309 X-Barracuda-Encrypted: ECDHE-RSA-AES256-SHA X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 869 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31684 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Thu, Jul 28, 2016 at 11:35:34AM -0700, Darrick J. Wong wrote: > Kirill A. Shutemov reports that the kernel doesn't try to cap dest_count > in any way, and uses the number to allocate kernel memory. This causes > high order allocation warnings in the kernel log if someone passes in a > big enough value. We should clamp the allocation at PAGE_SIZE to avoid > stressing the VM. > > The two existing users of the dedupe ioctl never send more than 120 > requests, so we can safely clamp dest_range at PAGE_SIZE, because with > 4k pages we can handle up to 127 dedupe candidates. Given the max > extent length of 16MB, we can end up doing 2GB of IO which is plenty. > > Reported-by: "Kirill A. Shutemov" > Signed-off-by: Darrick J. Wong Reviewed-by: Mark Fasheh -- Mark Fasheh From darrick.wong@oracle.com Mon Aug 1 22:57:00 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 09EB37CA4 for ; Mon, 1 Aug 2016 22:57:00 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7FFE6AC001 for ; Mon, 1 Aug 2016 20:56:59 -0700 (PDT) X-ASG-Debug-ID: 1470110217-0bf8157e6b393640001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id HoYRnjQXuLC2fIIo (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 01 Aug 2016 20:56:57 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u723usCn019993 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 03:56:55 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserv0021.oracle.com (8.13.8/8.13.8) with ESMTP id u723usBY023281 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 03:56:54 GMT Received: from abhmp0012.oracle.com (abhmp0012.oracle.com [141.146.116.18]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id u723uqOs005704; Tue, 2 Aug 2016 03:56:53 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 01 Aug 2016 20:56:52 -0700 Date: Mon, 1 Aug 2016 20:56:51 -0700 From: "Darrick J. Wong" To: david@fromorbit.com Cc: xfs@oss.sgi.com Subject: [PATCH] xfs: in _attrlist_by_handle, copy the cursor back to userspace Message-ID: <20160802035651.GB8593@birch.djwong.org> X-ASG-Orig-Subj: [PATCH] xfs: in _attrlist_by_handle, copy the cursor back to userspace MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: aserv0021.oracle.com [141.146.126.233] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1470110217 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 976 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31685 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines When we're iterating inode xattrs by handle, we have to copy the cursor back to userspace so that a subsequent invocation actually retrieves subsequent contents. Signed-off-by: Darrick J. Wong --- fs/xfs/xfs_ioctl.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index 2ef22db..30e69f5 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -390,6 +390,7 @@ xfs_attrlist_by_handle( { int error = -ENOMEM; attrlist_cursor_kern_t *cursor; + struct xfs_fsop_attrlist_handlereq __user *p = arg; xfs_fsop_attrlist_handlereq_t al_hreq; struct dentry *dentry; char *kbuf; @@ -422,6 +423,11 @@ xfs_attrlist_by_handle( if (error) goto out_kfree; + if (copy_to_user(&p->pos, cursor, sizeof(attrlist_cursor_kern_t))) { + error = -EFAULT; + goto out_kfree; + } + if (copy_to_user(al_hreq.buffer, kbuf, al_hreq.buflen)) error = -EFAULT; From sheena.33@hoistring.com Mon Aug 1 23:57:39 2016 Return-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.9 required=5.0 tests=AXB_BODYMAIL_SBL112884, FH_FROMEML_NOTLD,HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 647147D39 for ; Mon, 1 Aug 2016 23:57:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 37CAE304032 for ; Mon, 1 Aug 2016 21:57:35 -0700 (PDT) X-ASG-Debug-ID: 1470113851-0bf57b369c330180001-NocioJ Received: from hoistring.com (no-data [60.27.28.103]) by cuda.sgi.com with SMTP id BawQzaEotUi2PVA7 for ; Mon, 01 Aug 2016 21:57:32 -0700 (PDT) X-Barracuda-Envelope-From: sheena.33@hoistring.com X-Barracuda-Effective-Source-IP: no-data[60.27.28.103] X-Barracuda-Apparent-Source-IP: 60.27.28.103 Received: from ksbwyj[127.0.0.1] by KSBWYJ[127.0.0.1] (SMTPD32); Tue, 2 Aug 2016 12:37:16 +0800 From: "rigging1@yeah.net " Subject: 2016-08-02 12:37:16hoist ring factory To: xfs@oss.sgi.com X-ASG-Orig-Subj: 2016-08-02 12:37:16hoist ring factory MIME-Version: 1.0 Sender: sheena.33@hoistring.com Reply-To: rigging1@yeah.net Date: Tue, 2 Aug 2016 12:37:16 +0800 X-Mailer: Foxmail 6, 13, 102, 15 [cn] Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 Content-Disposition: inline X-Barracuda-Connect: no-data[60.27.28.103] X-Barracuda-Start-Time: 1470113851 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 875 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.64 X-Barracuda-Spam-Status: No, SCORE=0.64 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0713, HTML_MESSAGE, MIME_HTML_ONLY, MISSING_MID X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31686 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.50 BSF_SC0_MV0713 Custom rule MV0713 Message-Id: <20160802045735.C846A64005C@cuda.sgi.com> PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVU Ri04IiBodHRwLWVxdWl2PWNvbnRlbnQtdHlwZT4NCjxNRVRBIG5hbWU9R0VORVJBVE9SIGNvbnRl bnQ9Ik1TSFRNTCAxMS4wMC4xMDU4Ni4xNjIiPjwvSEVBRD4NCjxCT0RZPg0KPFA+SGksIHB1cmNo YXNpbmcgbWFuYWdlci48L1A+DQo8UD5Hb29kIGRheSE8L1A+DQo8UD5XZSBhcmUgaG9pc3Qgcmlu Zywgc3dpdmVsIGV5ZSBib2x0cyBhbmQgbGlmdGluZyBwb2ludCBtYW51ZmFjdHVyZXIsYW5kIHdl IA0KaGF2ZSByZXNlYXJjaGVkICZhbXA7IGRlc2lnbmVkIHNvbWUgbmV3IHByb2R1Y3QuPC9QPg0K PFA+SWYgeW91IGFyZSBpbnRlcmVzdGVkIGluLCBJICYjMzk7bGwgc2VuZCB5b3Ugb3VyIGNhdGFs b2d1ZS48L1A+DQo8UD5UaGFua3MgZm9yIHlvdXIgdmFsdWFibGUgdGltZS48L1A+DQo8UD5SZWdh cmRzLjwvUD4NCjxQPnNoZWVuYTwvUD4NCjxQPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LTwvUD4NCjxQPlNhbGVzIERlcGFydG1lbnQ8QlI+RS1tYWlsOnJpZ2dpbmcxQHllYWgubmV0PEJS PlNreXBlOnNoZWVuYS53YW5nMjAxMTxCUj5DZWxsIA0KcGhvbmU6MDA4Ni0xODYyMjg2MzYyMjxC Uj5UaWFuamluIFlpeXVuIFJpZ2dpbmcgQ28uLEx0ZDxCUj5BZGRyZXNzOiBOby43LCANClhpYW5n amlhbmcgUmluZyBSb2FkLCBEaXN0cmljdCBBLCBIb25nIEtvbmcgR2FyZGVuLCBEb25nbGkgRGV2 ZWxvcG1lbnQgWm9uZSANCixUaWFuamluLCBDaGluYTxCUj5aaXAgQ29kZTogMzAwMzAwPEJSPjwv UD48L0JPRFk+PC9IVE1MPg0KDQo= From zlang@redhat.com Tue Aug 2 01:49:09 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 9944C7D3B for ; Tue, 2 Aug 2016 01:49:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6AFA18F8033 for ; Mon, 1 Aug 2016 23:49:06 -0700 (PDT) X-ASG-Debug-ID: 1470120544-0bf57c13682d55d0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id xogMWTE9VHPtEBWB (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 01 Aug 2016 23:49:05 -0700 (PDT) X-Barracuda-Envelope-From: zlang@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8B6CC834 for ; Tue, 2 Aug 2016 06:49:04 +0000 (UTC) Received: from localhost (dhcp-12-154.nay.redhat.com [10.66.12.154]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u726n3aN022099; Tue, 2 Aug 2016 02:49:04 -0400 From: Zorro Lang To: xfs@oss.sgi.com Cc: sandeen@redhat.com, Zorro Lang Subject: [PATCH] xfs_quota: fall back silently if XFS_GETNEXTQUOTA fails Date: Tue, 2 Aug 2016 14:49:00 +0800 X-ASG-Orig-Subj: [PATCH] xfs_quota: fall back silently if XFS_GETNEXTQUOTA fails Message-Id: <1470120540-15135-1-git-send-email-zlang@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Tue, 02 Aug 2016 06:49:04 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470120545 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2247 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 After XFS_GETNEXTQUOTA feature has been merged into linux kernel and xfsprogs, xfs_quota use Q_XGETNEXTQUOTA for report and dump, and fall back to old XFS_GETQUOTA ioctl if XFS_GETNEXTQUOTA fails. But when XFS_GETNEXTQUOTA fails, xfs_quota print a warning as "XFS_GETQUOTA: Invalid argument". That's due to kernel can't recognize XFS_GETNEXTQUOTA ioctl and return EINVAL. At this time, the warning is helpless, xfs_quota just need to fall back. Signed-off-by: Zorro Lang --- Hi, Both dump_file and report_mount have this problem, so I fix them together. xfstests xfs/299 can reproduce this bug in report_mount, the newest xfs/106 can reproduce both(dump and report, hope I didn't miss others:). This patch checks "if cmd == XFS_GETQUOTA", but I'm thinking about if we should check "if !(cmd == XFS_GETNEXTQUOTA && errno == EINVAL)"? The first one don't print all errors from XFS_GETNEXTQUOTA, but the second one only for EINVAL error. So the question become should we: 1) fall back silently if XFS_GETNEXTQUOTA fails? 2) Or fall back silently if kernel has no XFS_GETNEXTQUOTA feature? I think both of them make sense. What do you think? Thanks, Zorro quota/report.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/quota/report.c b/quota/report.c index 59290e1..70220b4 100644 --- a/quota/report.c +++ b/quota/report.c @@ -90,8 +90,10 @@ dump_file( else cmd = XFS_GETQUOTA; + /* Fall back silently if XFS_GETNEXTQUOTA fails, warn on XFS_GETQUOTA */ if (xfsquotactl(cmd, dev, type, id, (void *)&d) < 0) { - if (errno != ENOENT && errno != ENOSYS && errno != ESRCH) + if (errno != ENOENT && errno != ENOSYS && errno != ESRCH && + cmd == XFS_GETQUOTA) perror("XFS_GETQUOTA"); return 0; } @@ -347,8 +349,10 @@ report_mount( else cmd = XFS_GETQUOTA; + /* Fall back silently if XFS_GETNEXTQUOTA fails, warn on XFS_GETQUOTA*/ if (xfsquotactl(cmd, dev, type, id, (void *)&d) < 0) { - if (errno != ENOENT && errno != ENOSYS && errno != ESRCH) + if (errno != ENOENT && errno != ENOSYS && errno != ESRCH && + cmd == XFS_GETQUOTA) perror("XFS_GETQUOTA"); return 0; } -- 2.7.4 From bratiliner@ziza.ru Tue Aug 2 03:23:05 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE, HTML_MIME_NO_HTML_TAG,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DD4047D3D for ; Tue, 2 Aug 2016 03:23:05 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id AF42F304039 for ; Tue, 2 Aug 2016 01:23:02 -0700 (PDT) X-ASG-Debug-ID: 1470126177-0bf57c13682d7810001-NocioJ Received: from mx.qip.ru (host-212.96.232.53.tvksmp.pl [212.96.232.53]) by cuda.sgi.com with ESMTP id b4FrEzuB5EC6OGGd for ; Tue, 02 Aug 2016 01:22:58 -0700 (PDT) X-Barracuda-Envelope-From: bratiliner@ziza.ru X-Barracuda-Effective-Source-IP: host-212.96.232.53.tvksmp.pl[212.96.232.53] X-Barracuda-Apparent-Source-IP: 212.96.232.53 From: "=?utf-8?B?0JIgINGC0LXQvdC00LXRgNC90YvQuSDQvtGC0LTQtdC7?=" To: Subject: =?utf-8?B?0JfQsNC60LDQt9GH0LjQutCw0Lw6INCk0JctMjIzOiDQv9GA0LDQutGC0LjRh9C10YHQutC40LUg0YDQtdC60L7QvNC10L3QtNCw0YbQuNC4INC/0L4g0LfQsNC60YPQv9C+0YfQvdC+0Lkg0LTQtdGP0YLQtdC70YzQvdC+0YHRgtC4LiDQoNCw0LzQvtGH0L3Ri9C1INC00L7Qs9C+0LLQvtGA0Ysg0LIg0L/RgNCw0LrRgtC40LrQtSAyMjMt0KTQlywg0Y3Qu9C10LrRgtGA0L7QvdC90YvQtSDRgtC+0YDQs9C4INC4INCw0YDQsdC40YLRgNCw0LY=?= MIME-Version: 1.0 X-ASG-Orig-Subj: =?utf-8?B?0JfQsNC60LDQt9GH0LjQutCw0Lw6INCk0JctMjIzOiDQv9GA0LDQutGC0LjRh9C10YHQutC40LUg0YDQtdC60L7QvNC10L3QtNCw0YbQuNC4INC/0L4g0LfQsNC60YPQv9C+0YfQvdC+0Lkg0LTQtdGP0YLQtdC70YzQvdC+0YHRgtC4LiDQoNCw0LzQvtGH0L3Ri9C1INC00L7Qs9C+0LLQvtGA0Ysg0LIg0L/RgNCw0LrRgtC40LrQtSAyMjMt0KTQlywg0Y3Qu9C10LrRgtGA0L7QvdC90YvQtSDRgtC+0YDQs9C4INC4INCw0YDQsdC40YLRgNCw0LY=?= Message-ID: X-Mailer: Yamail [ http://yandex.ru ] 5.0 Date: Tue, 2 Aug 2016 11:22:56 +0300 Content-Transfer-Encoding: base64 Content-Type: text/html; charset=utf-8 X-Barracuda-Connect: host-212.96.232.53.tvksmp.pl[212.96.232.53] X-Barracuda-Start-Time: 1470126177 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 15281 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.65 X-Barracuda-Spam-Status: No, SCORE=1.65 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, HTML_MESSAGE, HTML_MIME_NO_HTML_TAG, MIME_HTML_ONLY, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31688 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 1.05 HTML_MIME_NO_HTML_TAG HTML-only message, but there is no HTML tag 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 PGRpdj48dGFibGUgYmdjb2xvcj0iI0Y4RTREOCIgYm9yZGVyPSIxIiB3aWR0aD0iNzM1Ij48dGJv ZHk+PHRyPjx0ZCBiZ2NvbG9yPSIjRTdBODdFIiB3aWR0aD0iNCI+wqA8L3RkPjx0ZCBiZ2NvbG9y PSIjRTdBODdFIj7CoDwvdGQ+PHRkIGJnY29sb3I9IiNGOUU5REYiPsKgPC90ZD48dGQgYmdjb2xv cj0iI0Y0RDhDNiI+wqA8L3RkPjx0ZCBiZ2NvbG9yPSIjRjBDQUIwIj7CoDwvdGQ+PC90cj48dHI+ PHRkIGJnY29sb3I9IiNFN0E4N0UiIHdpZHRoPSI0Ij7CoDwvdGQ+PHRkIGJnY29sb3I9IiNGREY5 RjciPjx0YWJsZSBiZ2NvbG9yPSIjRkNGNEVGIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj48dGJv ZHk+PHRyPjx0ZCBiZ2NvbG9yPSIjRkRGOUY3Ij48cCBhbGlnbj0iY2VudGVyIj48Zm9udCBmYWNl PSJDYW1icmlhIj48YnIgLz48L2ZvbnQ+PHNwYW4gbGFuZz0iZW4tdXMiPjxmb250IGNvbG9yPSIj Q0MwMDAwIiBmYWNlPSJDYW1icmlhIiBzaXplPSI0Ij4wOSAtIDEwPC9mb250Pjwvc3Bhbj48Zm9u dCBjb2xvcj0iI0NDMDAwMCIgZmFjZT0iQ2FtYnJpYSI+PGZvbnQgc2l6ZT0iNCI+wqDQsNCy0LPR g9GB0YLQsCB8INCzLiDQnNC+0YHQutCy0LA8L2ZvbnQ+PC9mb250PjwvcD48cCBhbGlnbj0iY2Vu dGVyIj48Zm9udCBmYWNlPSJDYW1icmlhIj48Yj7Qn9GA0L7QvNC+0LrQvtC0PC9iPjxzcGFuIGxh bmc9ImVuLXVzIj48Yj46PC9iPsKgNDgyPC9zcGFuPjxiciAvPjxiciAvPjxmb250IGNvbG9yPSIj RkY2NjAwIiBzaXplPSI0Ij7QkNCa0KLQo9CQ0JvQrNCd0KvQlSDQktCe0J/QoNCe0KHQqyDQn9Cg 0JDQmtCi0JjQmtCYINCf0KDQmNCc0JXQndCV0J3QmNCvIDIyMy3QpNCXINChINCj0KfQldCi0J7Q nCDQmNCX0JzQldCd0JXQndCY0Jkg0JIg0JfQkNCa0J7QndCe0JTQkNCi0JXQm9Cs0KHQotCS0JU8 YnIgLz48L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRjk5MzMiPjxiciAvPjwvZm9udD48Zm9udCBjb2xv cj0iIzAwMDA4MCIgc2l6ZT0iNCI+0J7QsdGD0YfQtdC90LjQtSDRgSDRg9GH0LDRgdGC0LjQtdC8 INGN0LrRgdC/0LXRgNGC0L7QsiDQuCDQv9GA0LXQtNGB0YLQsNCy0LjRgtC10LvRjyDQpNCQ0KEg 0KDQvtGB0YHQuNC4LjwvZm9udD48L2ZvbnQ+PC9wPjxwIGFsaWduPSJsZWZ0Ij48Zm9udCBmYWNl PSJDYW1icmlhIj48Yj48Zm9udCBzaXplPSIyIj7QntCx0YPRh9C10L3QuNC1INC00LvRjzo8L2Zv bnQ+PC9iPjxmb250IHNpemU9IjIiPsKg0YDRg9C60L7QstC+0LTQuNGC0LXQu9C10Lkg0Lgg0YHQ v9C10YbQuNCw0LvQuNGB0YLQvtCyINCz0L7RgdC60L7RgNC/0L7RgNCw0YbQuNC5LCDQk9Cj0J/Q vtCyLCDQpNCT0KPQnyDQuCDQnNCj0J/QvtCyLCDQsNCy0YLQvtC90L7QvNC90YvRhSzCoDxiciAv PtCx0Y7QtNC20LXRgtC90YvRhSDRg9GH0YDQtdC20LTQtdC90LjQuSDQuCDRgdGD0LHRitC10LrR gtC+0LIg0LXRgdGC0LXRgdGC0LLQtdC90L3Ri9GFINC80L7QvdC+0L/QvtC70LjQuTsg0LjRhSDQ tNC+0YfQtdGA0L3QuNGFINC+0YDQs9Cw0L3QuNC30LDRhtC40LksINGH0LvQtdC90L7QssKgPGJy IC8+0LfQsNC60YPQv9C+0YfQvdGL0YUg0LrQvtC80LjRgdGB0LjQuSDQt9Cw0LrQsNC30YfQuNC6 0L7Qsjsg0YHQv9C10YbQuNCw0LvQuNGB0YLQvtCyINGC0LXQvdC00LXRgNC90YvRhSDQvtGC0LTQ tdC70L7QsiDQuCDQvtGC0LTQtdC70L7QsiDQv9GA0L7QtNCw0LYg0LrQvtC80L/QsNC90LjQuS08 YnIgLz7Qv9C+0YHRgtCw0LLRidC40LrQvtCyICjQv9C+0LTRgNGP0LTRh9C40LrQvtCyKSwg0YHR g9Cx0YrQtdC60YLQvtCyINC80LDQu9C+0LPQviDQuCDRgdGA0LXQtNC90LXQs9C+INC/0YDQtdC0 0L/RgNC40L3QuNC80LDRgtC10LvRjNGB0YLQstCwLi48YnIgLz48YnIgLz48YnIgLz7Qo9GH0LDR gdGC0L3QuNC60LDQvCDQvtCx0YPRh9C10L3QuNGPINC/0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC 0YHRjyDQodCULdC00LjRgdC6INGBINGA0LDQsdC+0YfQuNC80Lgg0Lgg0L3QvtGA0LzQsNGC0LjQ stC90YvQvNC4INC00L7QutGD0LzQtdC90YLQsNC80LgswqA8YnIgLz7QstC60LvRjtGH0LDRjtGJ 0LjQuTog0LrQvtC80L/Qu9C10LrRgiDQvdC+0YDQvNCw0YLQuNCy0L3Qvi3Qv9GA0LDQstC+0LLR i9GFINCw0LrRgtC+0LIg0L/QviDQt9Cw0LrQvtC90YMgMjIzLdCk0JcsINGA0LDQt9GK0Y/RgdC9 0LXQvdC40LnCoDxiciAvPtCc0LjQvdGN0LrQvtC90L7QvNGA0LDQt9Cy0LjRgtC40Y8g0Lgg0KTQ kNChOyDQvtCx0YDQsNC30YbRiyDQn9C+0LvQvtC20LXQvdC40Lkg0L4g0LfQsNC60YPQv9C60LUs INC30LDQutGD0L/QvtGH0L3QvtC5INC60L7QvNC40YHRgdC40LgsINC00L7QutGD0LzQtdC90YLQ sNGG0LjQuCDQvsKgPGJyIC8+0LfQsNC60YPQv9C60LU7INGE0L7RgNC80Ysg0L/RgNC+0YLQvtC6 0L7Qu9C+0LIsINC/0YDQuNC60LDQt9C+0LIg0L/QviDQvtGB0YPRidC10YHRgtCy0LvQtdC90LjR jiDQt9Cw0LrRg9C/0L7Qujsg0LTQvtC70LbQvdC+0YHRgtC90YPRjiDQuNC90YHRgtGA0YPQutGG 0LjRjsKgPGJyIC8+0YHQv9C10YbQuNCw0LvQuNGB0YLQsCDQvtGC0LTQtdC70LAg0LfQsNC60YPQ v9C+0Lo7INC80LXRgtC+0LTQuNC60YMg0L7RhtC10L3QutC4INC30LDRj9Cy0L7QuiDRg9GH0LDR gdGC0L3QuNC60L7QsiDQutC+0L3QutGD0YDRgdC+0LIg0Lgg0LfQsNC/0YDQvtGB0L7QssKgPGJy IC8+0L/RgNC10LTQu9C+0LbQtdC90LjQuTsg0L/QvtC00LHQvtGA0LrQuCDRgNC10YjQtdC90LjQ uSDQpNCQ0KEgKNCj0KTQkNChKSwg0LDRgNCx0LjRgtGA0LDQttC90YvRhSDRgdGD0LTQvtCyINC/ 0L4g0YHQv9C+0YDQsNC8INC/0L4gMjIzLdCk0JcuPC9mb250Pjxmb250IGNvbG9yPSIjQzBDMEMw Ij48YnIgLz48L2ZvbnQ+PGJyIC8+PGI+0J7QsdGD0YfQtdC90LjQtSDQv9GA0L7QstC+0LTQuNGC 0YHRjzxzcGFuIGxhbmc9ImVuLXVzIj46PC9zcGFuPjwvYj7CoNGBIDEwPHNwYW4gbGFuZz0iZW4t dXMiPjo8L3NwYW4+MDAg0LTQviAxNzxzcGFuIGxhbmc9ImVuLXVzIj46PC9zcGFuPjMwPGJyIC8+ PGJyIC8+PGI+0JzQtdGA0L7Qv9GA0LjRj9GC0LjQtSDRgdC+0YHRgtC+0LjRgtGB0Y8g0L/QviDQ sNC00YDQtdGB0YM6wqA8L2I+PGJyIC8+0LwuINCR0LDRg9C80LDQvdGB0LrQsNGPLCDRg9C7LiDQ kdCw0YPQvNCw0L3RgdC60LDRjywg0LQuNiwg0YHRgtGALjIsINCRLtCmLjxiciAvPjxiciAvPjxm b250IGNvbG9yPSIjRkY2NjAwIj48Yj7QmNC90YTQvtGA0LzQsNGG0LjRjyDQuCDRgNC10LPQuNGB 0YLRgNCw0YbQuNGPINC/0L4g0YLQtdC70LXRhNC+0L3RgzwvYj48YnIgLz48L2ZvbnQ+wqA8YnIg Lz48Zm9udCBzaXplPSI0Ij44PC9mb250PsKgwqA8Zm9udCBzaXplPSIyIj7QutC+0LQg0LPQvtGA 0L7QtNCwwqA8L2ZvbnQ+PGZvbnQgc2l6ZT0iNCI+KDQ5NSnCoDwvZm9udD7CoDxmb250IHNpemU9 IjIiPtGC0LXQuzwvZm9udD48c3BhbiBsYW5nPSJlbi11cyI+PGZvbnQgc2l6ZT0iMiI+OjwvZm9u dD48L3NwYW4+wqDCoDxmb250IHNpemU9IjQiPjk2MS0wMC0zODwvZm9udD7CoMKgPGZvbnQgc2l6 ZT0iMiI+KNC80L3QvtCz0L7QutCw0L3QsNC70YzQvdGL0LkpPC9mb250PjxiPjxiciAvPsKgPC9i PjwvZm9udD48L3A+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48dGFibGUgYm9yZGVyPSIxIiB3 aWR0aD0iMTAwJSI+PHRib2R5Pjx0cj48dGQ+PHAgYWxpZ249ImNlbnRlciI+PGZvbnQgY29sb3I9 IiMwMDAwODAiIGZhY2U9IkNhbWJyaWEiIHNpemU9IjQiPtCa0YDQsNGC0LrQsNGPINC/0YDQvtCz 0YDQsNC80LzQsDo8L2ZvbnQ+PC9wPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PHA+PGZvbnQg ZmFjZT0iQ2FtYnJpYSI+PGI+MS4g0JfQsNC60L7QvdC+0LTQsNGC0LXQu9GM0L3QvtC1INGA0LXQ s9GD0LvQuNGA0L7QstCw0L3QuNC1INC30LDQutGD0L/QvtC6LjwvYj48YnIgLz7Qk9GA0LDQttC0 0LDQvdGB0LrQuNC5INCa0L7QtNC10LrRgSwg0LfQsNC60L7QvSAyMjMt0KTQlyAo0LIg0YDQtdC0 0LDQutGG0LjQuCDQvtGCIDEzLjA3LjIwMTUg0LMuKSwg0LfQsNC60L7QvSDQviDQutC+0L3RgtGA 0LDQutGC0L3QvtC5INGB0LjRgdGC0LXQvNC1IDQ0LTxiciAvPtCk0JcsINC30LDQutC+0L0gMTM1 LdCk0JcgwqvQniDQt9Cw0YnQuNGC0LUg0LrQvtC90LrRg9GA0LXQvdGG0LjQuMK7LiDQn9C+0YHR gtCw0L3QvtCy0LvQtdC90LjRjyDQn9GA0LDQstC40YLQtdC70YzRgdGC0LLQsCDihJYgMTE2OSwg MTM1MiwgMTEzMizCoDxiciAvPjkwOCwgOTMyLCA2MTYg0Lgg0LTRgC48YnIgLz48Yj4yLiDQn9C+ 0YHQu9C10LTQvdC40LUg0LjQt9C80LXQvdC10L3QuNGPINC30LDQutC+0L3QsCDihJYgMjIzLdCk 0JcuPC9iPjxiciAvPtCe0YHQvtCx0LXQvdC90L7RgdGC0Lgg0LfQsNC60YPQv9C+0Log0L/RgNC4 INGA0LXQsNC70LjQt9Cw0YbQuNC4INC40L3QstC10YHRgtC40YbQuNC+0L3QvdGL0YUg0L/RgNC+ 0LXQutGC0L7Qsjsg0LLQstC10LTQtdC90LjQtSDQvtGG0LXQvdC60Lgg0Lgg0LzQvtC90LjRgtC+ 0YDQuNC90LPQsMKgPGJyIC8+0L/RgNC+0LXQutGC0L7QsiDQv9C70LDQvdC+0LIsINC/0LvQsNC9 0L7QsiDQt9Cw0LrRg9C/0LrQuCDQuCDQvtGC0YfQtdGC0L7QsiDQt9Cw0LrQsNC30YfQuNC60L7Q siwg0LfQsNC/0YDQtdGCINC90LAg0LfQsNC60LvRjtGH0LXQvdC40LUg0LTQvtCz0L7QstC+0YDQ vtCyLCDQvdC1wqA8YnIgLz7QstC60LvRjtGH0LXQvdC90YvRhSDQsiDQv9C70LDQvSDQt9Cw0LrR g9C/0LrQuC48YnIgLz48Yj4zLiDQn9C70LDQvdC40YDRg9C10LzRi9C1INC40LfQvNC10L3QtdC9 0LjRjyAyMjMt0KTQly48L2I+PGJyIC8+0J7Qs9GA0LDQvdC40YfQtdC90L3Ri9C5INC/0LXRgNC1 0YfQtdC90Ywg0YHQv9C+0YHQvtCx0L7QsiDQuCDRjdGC0LDQv9C+0LIg0L/RgNC+0LLQtdC00LXQ vdC40Y8g0LfQsNC60YPQv9C60LgsINC+0YLQsdC+0YAg0L7Qv9C10YDQsNGC0L7RgNC+0LIg0Y3Q u9C10LrRgtGA0L7QvdC90YvRhcKgPGJyIC8+0L/Qu9C+0YnQsNC00L7Quiwg0LLQstC10LTQtdC9 0LjQtSDRgtC40L/QvtCy0YvRhSDQv9C+0LvQvtC20LXQvdC40Lkg0L4g0LfQsNC60YPQv9C60LUs INGA0LDRgdGI0LjRgNC10L3QuNC1INCy0L7Qt9C80L7QttC90L7RgdGC0LXQuSDQtNC70Y8g0L7Q sdC20LDQu9C+0LLQsNC90LjRj8KgPGJyIC8+0LfQsNC60YPQv9C+0LosINCy0LLQtdC00LXQvdC4 0LUg0L/RgNC+0YbQtdC00YPRgNC90YvRhSDQvdC+0YDQvCDQtNC70Y8g0LrQvtC90LrRg9GA0LXQ vdGC0L3Ri9GFINGB0L/QvtGB0L7QsdC+0LIg0LfQsNC60YPQv9C60LgsINC/0LXRgNC10LLQvtC0 INC60L7QvdC60YPRgNC10L3RgtC90YvRhcKgPGJyIC8+0LfQsNC60YPQv9C+0Log0LIg0Y3Qu9C1 0LrRgtGA0L7QvdC90YPRjiDRhNC+0YDQvNGDLCDRg9C20LXRgdGC0L7Rh9C10L3QuNC1INGC0YDQ tdCx0L7QstCw0L3QuNC5INC6INGA0LDQt9C80LXRidC10L3QuNGOINC40L3RhNC+0YDQvNCw0YbQ uNC4INCyINCV0JjQoS7CoDxiciAvPjxiPjQuINCX0LDQutCw0LfRh9C40LrQuCwg0L/RgNC40LzQ tdC90Y/RjtGJ0LjQtSDQvdC+0YDQvNGLINCk0JctMjIzLjwvYj7CoDxiciAvPjxzcGFuIGxhbmc9 ImVuLXVzIj7CoMKgwqA8L3NwYW4+0J7RgdC+0LHQtdC90L3QvtGB0YLQuCDQt9Cw0LrRg9C/0L7Q uiDQsdGO0LTQttC10YLQvdGL0YUg0YPRh9GA0LXQttC00LXQvdC40Lkg0L/QviAyMjMt0KTQlywg 0LDQstGC0L7QvdC+0LzQvdGL0YUg0YPRh9GA0LXQttC00LXQvdC40LkswqA8YnIgLz48c3BhbiBs YW5nPSJlbi11cyI+wqDCoMKgPC9zcGFuPtGD0L3QuNGC0LDRgNC90YvRhSDQv9GA0LXQtNC/0YDQ uNGP0YLQuNC5LjxiciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7CoMKgwqA8L3NwYW4+0J7RgdC90L7Q stC90YvQtSDQvtGC0LvQuNGH0LjRjyDQt9Cw0LrRg9C/0L7QuiDQv9C+IDIyMy3QpNCXINC4IDQ0 LdCk0JcgKNC60L7QvdGC0YDQsNC60YLQvdCw0Y8g0YHQuNGB0YLQtdC80LApLjxiciAvPjxzcGFu IGxhbmc9ImVuLXVzIj7CoMKgwqA8L3NwYW4+PGI+0J/QvtC70L7QttC10L3QuNC1INC+INC30LDQ utGD0L/QutC1OjwvYj7CoNGB0YLRgNGD0LrRgtGD0YDQsCwg0L7RgdC+0LHQtdC90L3QvtGB0YLQ uCDQtNC70Y8g0YDQsNC30LvQuNGH0L3Ri9GFINC30LDQutCw0LfRh9C40LrQvtCyLCDQvtCx0LfQ vtGAINGC0LjQv9C+0LLRi9GFwqA8YnIgLz48c3BhbiBsYW5nPSJlbi11cyI+wqDCoMKgPC9zcGFu PtC/0L7Qu9C+0LbQtdC90LjQuS4g0KLQuNC/0LjRh9C90YvQtSDQvtGI0LjQsdC60Lgg0LfQsNC6 0LDQt9GH0LjQutC+0LIuINCg0LXQutC+0LzQtdC90LTQsNGG0LjQuCDQv9C+INC40LfQvNC10L3Q tdC90LjRjiDQuCDQtNC+0L/QvtC70L3QtdC90LjRjsKgPGJyIC8+PHNwYW4gbGFuZz0iZW4tdXMi PsKgwqDCoDwvc3Bhbj7Qn9C+0LvQvtC20LXQvdC40Y8g0L4g0LfQsNC60YPQv9C60LUsINGBINGD 0YfQtdGC0L7QvCDQuNC30LzQtdC90LXQvdC40Lkg0LfQsNC60L7QvdCwIOKEliAyMjMt0KTQly48 YnIgLz48Yj41LiDQodGC0LDQvdC00LDRgNGCPC9iPsKg0LfQsNC60YPQv9C+0YfQvdC+0Lkg0LTQ tdGP0YLQtdC70YzQvdC+0YHRgtC4INC/0L4gMjIzLdCk0Jcg0L7RgiDQpNCQ0KE6INC90LXQvtCx 0YXQvtC00LjQvNGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCywqA8YnIgLz7RgNC10LPRg9C70LjR gNC+0LLQsNC90LjQuCDQt9Cw0LrRg9C/0L7Qui48YnIgLz48Yj42LiDQn9C70LDQvdC40YDQvtCy 0LDQvdC40LUg0LfQsNC60YPQv9C+0LouPC9iPsKgPGJyIC8+PHNwYW4gbGFuZz0iZW4tdXMiPsKg wqDCoDwvc3Bhbj7QmNC30LzQtdC90LXQvdC40Y8g0L/QvtGA0Y/QtNC60LAg0L/Qu9Cw0L3QuNGA 0L7QstCw0L3QuNGPINC30LDQutGD0L/QvtC6INCyIDIwMTYg0LPQvtC00YMuINCf0LXRgNC10YXQ vtC0INC6INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGOwqA8YnIgLz48c3BhbiBsYW5nPSJlbi11 cyI+wqDCoMKgPC9zcGFuPtC60LvQsNGB0YHQuNGE0LjQutCw0YLQvtGA0L7QsiDQntCa0J/QlDIs INCe0JrQktCt0JQyLjxiciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7CoMKgwqA8L3NwYW4+0J/Qu9Cw 0L3QuNGA0L7QstCw0L3QuNC1INC30LDQutGD0L/QvtC6INGDINGB0YPQsdGK0LXQutGC0L7QsiDQ vNCw0LvQvtCz0L4g0Lgg0YHRgNC10LTQvdC10LPQviDQv9GA0LXQtNC/0YDQuNC90LjQvNCw0YLQ tdC70YzRgdGC0LLQsC48YnIgLz48c3BhbiBsYW5nPSJlbi11cyI+wqDCoMKgPC9zcGFuPtCe0YbQ tdC90LrQsCDQuCDQvNC+0L3QuNGC0L7RgNC40L3QsyDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g 0L/Qu9Cw0L3QvtCyINC30LDQutGD0L/QutC4LCDQv9GA0L7QtdC60YLQvtCyINC/0LvQsNC90L7Q siwg0LjQt9C80LXQvdC10L3QuNC5INC/0LvQsNC90L7QsiDQuMKgPGJyIC8+PHNwYW4gbGFuZz0i ZW4tdXMiPsKgwqDCoDwvc3Bhbj7Qv9GA0L7QtdC60YLQvtCyINC40LfQvNC10L3QtdC90LjQuSDQ siDRh9Cw0YHRgtC4INGB0L7QvtGC0LLQtdGC0YHRgtCy0LjRjyDQt9Cw0LrQvtC90L7QtNCw0YLQ tdC70YzRgdGC0LLRgyDQviDRgNCw0LfQstC40YLQuNC4INC80LDQu9C+0LPQviDQuCDRgdGA0LXQ tNC90LXQs9C+wqA8YnIgLz48c3BhbiBsYW5nPSJlbi11cyI+wqDCoMKgPC9zcGFuPtC/0YDQtdC0 0L/RgNC40L3QuNC80LDRgtC10LvRjNGB0YLQstCwLjxiciAvPjxiPjcuINCV0LTQuNC90LDRjyDQ uNC90YTQvtGA0LzQsNGG0LjQvtC90L3QsNGPINGB0LjRgdGC0LXQvNCwINCyINGB0YTQtdGA0LUg 0LfQsNC60YPQv9C+0LogKNCV0JjQoSkuPC9iPjxiciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7CoMKg wqA8L3NwYW4+0J/RgNC40L3RhtC40L/QuNCw0LvRjNC90YvQtSDQvtGC0LvQuNGH0LjRjyDQvtGC INC+0YTQuNGG0LjQsNC70YzQvdC+0LPQviDRgdCw0LnRgtCwLCDRgdGC0YDRg9C60YLRg9GA0LAs INGB0L7QtNC10YDQttCw0L3QuNC1LCDQvdC+0LLRi9C1INGC0YDQtdCx0L7QstCw0L3QuNGPPGJy IC8+PHNwYW4gbGFuZz0iZW4tdXMiPsKgwqDCoDwvc3Bhbj7QuiDRgNCw0LfQvNC10YnQtdC90LjR jiDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDQt9Cw0LrRg9C/0LrQsNGFLjxiciAvPjxzcGFuIGxh bmc9ImVuLXVzIj7CoMKgwqA8L3NwYW4+0KDQtdC10YHRgtGAINC00L7Qs9C+0LLQvtGA0L7Qsiwg 0LfQsNC60LvRjtGH0LDQtdC80YvRhSDQv9C+INC40YLQvtCz0LDQvCDQt9Cw0LrRg9C/0LrQuC48 YnIgLz48Yj44LiDQn9C+0YDRj9C00L7Quiwg0Y3RgtCw0L/RiyDQv9GA0L7QstC10LTQtdC90LjR jyDQt9Cw0L/RgNC+0YHQsCDQv9GA0LXQtNC70L7QttC10L3QuNC5LCDQutC+0L3QutGD0YDRgdCw LCDQt9Cw0L/RgNC+0YHQsCDQutC+0YLQuNGA0L7QstC+0LogKNGG0LXQvSkswqA8YnIgLz7RjdC7 0LXQutGC0YDQvtC90L3QvtCz0L4g0LDRg9C60YbQuNC+0L3QsC48L2I+wqA8YnIgLz48c3BhbiBs YW5nPSJlbi11cyI+wqDCoMKgPC9zcGFuPtCY0LfQstC10YnQtdC90LjQtS4g0JTQvtC60YPQvNC1 0L3RgtCw0YbQuNGPINC+INC30LDQutGD0L/QutC1LiDQoNCw0LfRgNCw0LHQvtGC0LrQsCDRgtC1 0YXQvdC40YfQtdGB0LrQuNGFINC30LDQtNCw0L3QuNC5LCDQv9GA0L7QtdC60YLQsCDQtNC+0LPQ vtCy0L7RgNCwLsKgPGJyIC8+PHNwYW4gbGFuZz0iZW4tdXMiPsKgwqDCoDwvc3Bhbj7Qn9GA0LDQ utGC0LjQutCwINC+0LHQttCw0LvQvtCy0LDQvdC40Y8g0LTQvtC60YPQvNC10L3RgtCw0YbQuNC4 INC+INC30LDQutGD0L/QutC1LjxiciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7CoMKgwqA8L3NwYW4+ 0KLRgNC10LHQvtCy0LDQvdC40Y8g0Log0YPRh9Cw0YHRgtC90LjQutCw0Lwg0LfQsNC60YPQv9C+ 0Lo6INC+0LHRj9C30LDRgtC10LvRjNC90YvQtSDQuCDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3R i9C1LiDQmtCy0LDQu9C40YTQuNC60LDRhtC40Y/CoDxiciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7C oMKgwqA8L3NwYW4+0YPRh9Cw0YHRgtC90LjQutC+0LI6INGC0YDQtdCx0L7QstCw0L3QuNC1INC4 INC60YDQuNGC0LXRgNC40Lkg0L7RhtC10L3QutC4INC30LDRj9Cy0L7QujxiciAvPjxzcGFuIGxh bmc9ImVuLXVzIj7CoMKgwqA8L3NwYW4+PGk+PGI+0KLRgNC10L3QuNC90LM6PC9iPjwvaT7CoNCy 0YvRj9Cy0LvQtdC90LjQtSDQuCDQuNGB0L/RgNCw0LLQu9C10L3QuNC1INC+0YjQuNCx0L7QuiDQ siDQtNC+0LrRg9C80LXQvdGC0LDRhtC40Lgg0L4g0LfQsNC60YPQv9C60LU8YnIgLz48c3BhbiBs YW5nPSJlbi11cyI+wqDCoMKgPC9zcGFuPtCe0LHRj9C30LDRgtC10LvRjNC90YvQtSDQt9Cw0LrR g9C/0LrQuCDRgyDRgdGD0LHRitC10LrRgtC+0LIg0LzQsNC70L7Qs9C+INC4INGB0YDQtdC00L3Q tdCz0L4g0L/RgNC10LTQv9GA0LjQvdC40LzQsNGC0LXQu9GM0YHRgtCy0LAuINCf0L7RgdGC0LDQ vdC+0LLQu9C10L3QuNC1wqA8YnIgLz48c3BhbiBsYW5nPSJlbi11cyI+wqDCoMKgPC9zcGFuPtCf 0YDQsNCy0LjRgtC10LvRjNGB0YLQstCwIOKEliAxMzUyLiDQodC/0L7RgdC+0LHRiyDQt9Cw0LrR g9C/0L7QuiDRgyDQodCc0LjQodCfLiDQntCx0Y/Qt9Cw0YLQtdC70YzQvdGL0LUg0YLRgNC10LHQ vtCy0LDQvdC40Y8g0Log0LfQsNC60YPQv9C60LDQvC7CoDxiciAvPjxzcGFuIGxhbmc9ImVuLXVz Ij7CoMKgwqA8L3NwYW4+0J3QvtCy0LDRjyDRhNC+0YDQvNCwINC00LXQutC70LDRgNCw0YbQuNC4 INGD0YfQsNGB0YLQvdC40LrQsCDRgSAxINGP0L3QstCw0YDRjyAyMDE2INCz0L7QtNCwLiDQntGC 0YfQtdGC0L3QvtGB0YLRjCDQviDQt9Cw0LrRg9C/0LrQsNGFINGDINCh0JzQuNCh0J8uPGJyIC8+ PHNwYW4gbGFuZz0iZW4tdXMiPsKgwqDCoDwvc3Bhbj7Ql9Cw0LrRgNGL0YLRi9C1INC30LDQutGD 0L/QutC4OiDRg9GB0LvQvtCy0LjRjyDQuCDQv9C+0YDRj9C00L7QuiDQv9GA0L7QstC10LTQtdC9 0LjRjzxiciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7CoMKgwqA8L3NwYW4+0JTQvtC/0L7Qu9C90LjR gtC10LvRjNC90YvQtSDQv9GA0L7RhtC10LTRg9GA0Ys6INC60LLQsNC70LjRhNC40LrQsNGG0LjQ vtC90L3Ri9C5INC+0YLQsdC+0YAsINC60L7QvdC60YPRgNC10L3RgtC90YvQtSDQv9C10YDQtdCz 0L7QstC+0YDRiyzCoDxiciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7CoMKgwqA8L3NwYW4+wqvQv9C1 0YDQtdGC0L7RgNC20LrQsMK7LCDQv9C+0LTQsNGH0LAg0LDQu9GM0YLQtdGA0L3QsNGC0LjQstC9 0YvRhSDQt9Cw0Y/QstC+0LosINC/0L7RgdGC0LrQstCw0LvQuNGE0LjQutCw0YbQuNGPPGJyIC8+ PGI+OS4g0J7RgdC+0LHQtdC90L3QvtGB0YLQuCDQt9Cw0LrRg9C/0L7QuiDQsiDRjdC70LXQutGC 0YDQvtC90L3QvtC5INGE0L7RgNC80LUuPC9iPsKgPGJyIC8+PHNwYW4gbGFuZz0iZW4tdXMiPsKg wqDCoDwvc3Bhbj7QntCx0LfQvtGAINGN0LvQtdC60YLRgNC+0L3QvdGL0YUg0L/Qu9C+0YnQsNC0 0L7Qui4g0J/RgNCw0LrRgtC40LrQsCDQt9Cw0LrRg9C/0L7QuiDQsiDRjdC70LXQutGC0YDQvtC9 0L3QvtC5INGE0L7RgNC80LUuPGJyIC8+PGI+MTAuINCj0YfQsNGB0YLQuNC1INCyINC30LDQutGD 0L/QutCw0YUg0L/QviDQpNCXLTIyMy48L2I+wqA8YnIgLz48c3BhbiBsYW5nPSJlbi11cyI+wqDC oMKgwqDCoDwvc3Bhbj7Qn9C+0LTQs9C+0YLQvtCy0LrQsCDQt9Cw0Y/QstC60LguINCe0YHQvdC+ 0LLQsNC90LjRjyDQtNC70Y8g0L7RgtC60LvQvtC90LXQvdC40Y8g0LfQsNGP0LLQvtC6LiDQn9GA 0LDQutGC0LjQutCwINC+0LHQttCw0LvQvtCy0LDQvdC40Y8g0L7RgtC60LvQvtC90LXQvdC40Y/C oDxiciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7CoMKgwqDCoMKgPC9zcGFuPtC30LDRj9Cy0L7Qujxi ciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7CoMKgwqDCoMKgPC9zcGFuPjxpPjxiPtCi0YDQtdC90LjQ vdCzOjwvYj48L2k+wqDRgtGA0LXQsdC+0LLQsNC90LjRjyDQuiDRgdC+0YHRgtCw0LLRgyDQt9Cw 0Y/QstC60Lgg0L3QsCDRg9GH0LDRgdGC0LjQtSDQsiDQt9Cw0LrRg9C/0LrQtTxiciAvPjxzcGFu IGxhbmc9ImVuLXVzIj7CoMKgwqDCoMKgPC9zcGFuPtCf0L7RgNGP0LTQvtC6INC+0YbQtdC90LrQ uCDQuCDRgdC+0L/QvtGB0YLQsNCy0LvQtdC90LjRjyDQt9Cw0Y/QstC+0Log0YPRh9Cw0YHRgtC9 0LjQutC+0LIuINCc0LXRgtC+0LTRiyDQsdCw0LvQu9GM0L3QvtC5INC+0YbQtdC90LrQuCzCoDxi ciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7CoMKgwqDCoMKgPC9zcGFuPtGA0LDQvdC20LjRgNC+0LLQ sNC90LjRjy4g0J/RgNC40LzQtdGA0Ysg0Lgg0YPRgdC70L7QstC40Y8g0L/RgNC40LzQtdC90LXQ vdC40Y88YnIgLz48c3BhbiBsYW5nPSJlbi11cyI+wqDCoMKgwqDCoDwvc3Bhbj7QmtGA0LjRgtC1 0YDQuNC4IMKr0JrQsNGH0LXRgdGC0LLQvsK7INC4IMKr0JrQstCw0LvQuNGE0LjQutCw0YbQuNGP INGD0YfQsNGB0YLQvdC40LrQvtCywrsuINCd0L7QstGL0LUg0YLRgNC10LHQvtCy0LDQvdC40Y8g 0KTQkNChINC6INC/0L7RgNGP0LTQutGDwqA8YnIgLz48c3BhbiBsYW5nPSJlbi11cyI+wqDCoMKg wqDCoDwvc3Bhbj7QvtGG0LXQvdC60Lgg0LfQsNGP0LLQvtC6LjxiciAvPjxzcGFuIGxhbmc9ImVu LXVzIj7CoMKgwqDCoMKgPC9zcGFuPtCa0L7QvNC/0LvQtdC60YEg0LzQtdGAINC/0YDQvtGC0LjQ siDQvdC10LTQvtCx0YDQvtGB0L7QstC10YHRgtC90YvRhSDQv9C+0YHRgtCw0LLRidC40LrQvtCy PGJyIC8+PHNwYW4gbGFuZz0iZW4tdXMiPsKgwqDCoMKgwqA8L3NwYW4+PGI+0JfQsNC60YPQv9C6 0Lgg0YMg0LXQtNC40L3RgdGC0LLQtdC90L3QvtCz0L4g0L/QvtGB0YLQsNCy0YnQuNC60LAuPC9i PsKg0J7RhNC+0YDQvNC70LXQvdC40LUg0LfQsNC60YPQv9C+0Log0Lgg0YDQsNC30LzQtdGJ0LXQ vdC40LUg0LjQvdGE0L7RgNC80LDRhtC40Lgg0LLCoDxiciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7C oMKgwqDCoMKgPC9zcGFuPtCV0JjQoS4gwqvQoNCw0LzQvtGH0L3Ri9C1wrsg0LTQvtCz0L7QstC+ 0YDRizxiciAvPjxiPjExLiDQntGC0LLQtdGC0YHRgtCy0LXQvdC90L7RgdGC0Ywg0L/QvtGB0YLQ sNCy0YnQuNC60L7Qsi48L2I+wqA8YnIgLz48c3BhbiBsYW5nPSJlbi11cyI+wqDCoMKgwqDCoDwv c3Bhbj7QoNC10LXRgdGC0YAg0L3QtdC00L7QsdGA0L7RgdC+0LLQtdGB0YLQvdGL0YUg0L/QvtGB 0YLQsNCy0YnQuNC60L7QsjxiciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7CoMKgwqDCoMKgPC9zcGFu PtCe0YLQstC10YLRgdGC0LLQtdC90L3QvtGB0YLRjCDQt9Cw0LrQsNC30YfQuNC60L7QsiAo0JrQ vtCQ0J8pLsKgPGJyIC8+PHNwYW4gbGFuZz0iZW4tdXMiPsKgwqDCoMKgwqA8L3NwYW4+0J3QvtCy 0YvQtSDQv9C+0LvQvdC+0LzQvtGH0LjRjyDQpNCQ0KEg0LIg0YHRhNC10YDQtSDQutC+0L3RgtGA 0L7Qu9GPINC30LDQutGD0L/QvtC6INC/0L4gMjIzLdCk0JcuwqA8YnIgLz48c3BhbiBsYW5nPSJl bi11cyI+wqDCoMKgwqDCoDwvc3Bhbj7Qn9GA0L7QutGD0YDQvtGA0YHQutC40LUg0L/RgNC+0LLQ tdGA0LrQuCDQsiDRgdGE0LXRgNC1INC30LDQutGD0L/QvtC6PGJyIC8+PHNwYW4gbGFuZz0iZW4t dXMiPsKgwqDCoMKgwqA8L3NwYW4+0J7QsdC20LDQu9C+0LLQsNC90LjQtSDQtNC10LnRgdGC0LLQ uNC5INC30LDQutCw0LfRh9C40LrQvtCyLiDQkNC90L3Rg9C70LjRgNC+0LLQsNC90LjQtSDQv9GA 0L7RhtC10LTRg9GALCDQv9GA0LXQtNC/0LjRgdCw0L3QuNGPLsKgPGJyIC8+PHNwYW4gbGFuZz0i ZW4tdXMiPsKgwqDCoMKgwqA8L3NwYW4+0JDQtNC80LjQvdC40YHRgtGA0LDRgtC40LLQvdCw0Y8g 0L/RgNCw0LrRgtC40LrQsCDQpNCQ0KE8YnIgLz48Yj4xMi4g0J/QvtGA0Y/QtNC+0Log0LfQsNC6 0LvRjtGH0LXQvdC40Y8g0Lgg0LjRgdC/0L7Qu9C90LXQvdC40Y8g0LTQvtCz0L7QstC+0YDQvtCy LjwvYj7CoDxiciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7CoMKgwqDCoMKgPC9zcGFuPtCa0L7QvdGC 0YDQvtC70Ywg0LjRgdC/0L7Qu9C90LXQvdC40Y8g0LTQvtCz0L7QstC+0YDQvtCyLiDQmNC30LzQ tdC90LXQvdC40LUg0Lgg0YDQsNGB0YLQvtGA0LbQtdC90LjQtSDQtNC+0LPQvtCy0L7RgNC+0LIu INCg0LDQt9C80LXRidC10L3QuNC1wqA8YnIgLz48c3BhbiBsYW5nPSJlbi11cyI+wqDCoMKgwqDC oDwvc3Bhbj7QuNC90YTQvtGA0LzQsNGG0LjQuCDQvtCxINC40LfQvNC10L3QtdC90LjQuCDQtNC+ 0LPQvtCy0L7RgNC+0LIg0LIg0JXQmNChLjxiciAvPjxzcGFuIGxhbmc9ImVuLXVzIj7CoMKgwqDC oMKgPC9zcGFuPtCg0LXQtdGB0YLRgCDQtNC+0LPQvtCy0L7RgNC+0LIg0JXQmNChOiDRgdGC0YDR g9C60YLRg9GA0LAsINGB0L7QtNC10YDQttCw0L3QuNC1LCDRgtGA0LXQsdC+0LLQsNC90LjRjyDQ pNC10LTQtdGA0LDQu9GM0L3QvtCz0L4g0JrQsNC30L3QsNGH0LXQudGB0YLQstCwINC6wqA8YnIg Lz48c3BhbiBsYW5nPSJlbi11cyI+wqDCoMKgwqDCoDwvc3Bhbj7RgNCw0LfQvNC10YnQtdC90LjR jiDQuNC90YTQvtGA0LzQsNGG0LjQuCDRgSAxINGP0L3QstCw0YDRjyAyMDE2INCzLjxiciAvPjxz cGFuIGxhbmc9ImVuLXVzIj7CoMKgwqDCoMKgPC9zcGFuPtCe0YLRh9C10YLQvdC+0YHRgtGMINC+ INC30LDQutGD0L/QutCw0YUg0L/QviAyMjMt0KTQly48YnIgLz7CoDwvZm9udD48L3A+PHRhYmxl IGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiPjx0Ym9keT48dHI+PHRkPjxwIGFsaWduPSJjZW50ZXIi Pjxmb250IGNvbG9yPSIjQzBDMEMwIj48c3BhbiBsYW5nPSJlbiI+PGZvbnQgZmFjZT0iQ2FtYnJp YSI+wqs8L2ZvbnQ+PC9zcGFuPjxmb250IGZhY2U9IkNhbWJyaWEiPjxzcGFuIGxhbmc9ImVuIj7C q8K7wrs8L3NwYW4+wqA8c3BhbiBsYW5nPSJlbiI+wqvCq8K7wrs8L3NwYW4+wqA8c3BhbiBsYW5n PSJlbiI+wqvCq8K7wrs8L3NwYW4+wqA8c3BhbiBsYW5nPSJlbiI+wqvCq8K7wrs8L3NwYW4+wqA8 L2ZvbnQ+PHNwYW4gbGFuZz0iZW4iPjxmb250IGZhY2U9IkNhbWJyaWEiPsKrPC9mb250Pjwvc3Bh bj48Zm9udCBmYWNlPSJDYW1icmlhIj48c3BhbiBsYW5nPSJlbiI+wqvCu8K7PC9zcGFuPsKgPHNw YW4gbGFuZz0iZW4iPsKrwqvCu8K7PC9zcGFuPsKgPHNwYW4gbGFuZz0iZW4iPsKrwqvCu8K7PC9z cGFuPsKgPHNwYW4gbGFuZz0iZW4iPsKrwqvCu8K7PC9zcGFuPsKgPC9mb250PjxzcGFuIGxhbmc9 ImVuIj48Zm9udCBmYWNlPSJDYW1icmlhIj7CqzwvZm9udD48L3NwYW4+PGZvbnQgZmFjZT0iQ2Ft YnJpYSI+PHNwYW4gbGFuZz0iZW4iPsKrwrvCuzwvc3Bhbj7CoDxzcGFuIGxhbmc9ImVuIj7Cq8Kr wrvCuzwvc3Bhbj7CoDwvZm9udD48c3BhbiBsYW5nPSJlbiI+PGZvbnQgZmFjZT0iQ2FtYnJpYSI+ wqs8L2ZvbnQ+PC9zcGFuPjxmb250IGZhY2U9IkNhbWJyaWEiPjxzcGFuIGxhbmc9ImVuIj7Cq8K7 wrs8L3NwYW4+wqA8c3BhbiBsYW5nPSJlbiI+wqvCq8K7wrs8L3NwYW4+PC9mb250PjwvZm9udD48 Yj48Zm9udCBjb2xvcj0iI0MwQzBDMCIgZmFjZT0iQ2FtYnJpYSI+PGJyIC8+PGJyIC8+PC9mb250 Pjxmb250IGNvbG9yPSIjRkY2NjAwIiBmYWNlPSJDYW1icmlhIj7QodGC0L7QuNC80L7RgdGC0Ywg 0YPRh9Cw0YHRgtC40Y86PC9mb250PjwvYj48Zm9udCBmYWNlPSJDYW1icmlhIj48Zm9udCBjb2xv cj0iI0ZGNjYwMCI+wqA8L2ZvbnQ+PGI+PHNwYW4gbGFuZz0iZW4tdXMiPjIyPC9zcGFuPsKgODAw INGA0YPQsS48L2I+PGJyIC8+PGZvbnQgY29sb3I9IiNGRjY2MDAiPjxiPtCh0LrQuNC00LrQuDwv Yj48L2ZvbnQ+wqAoPGI+MiDRh9C10LvQvtCy0LXQutCwIOKAkyAxMCUsIDMg0YfQtdC70L7QstC1 0LrQsCDigJMgMTUlLCA0INGH0LXQu9C+0LLQtdC60LAg0Lgg0LHQvtC70LXQtSDigJMgMjAlLjwv Yj4pPGJyIC8+0JIg0YHRgtC+0LjQvNC+0YHRgtGMINCy0YXQvtC00LjRgiDQvNC10YLQvtC00LjR h9C10YHQutC40Lkg0LzQsNGC0LXRgNC40LDQuywg0L7QsdC10LTRiywg0LrQvtGE0LUt0L/QsNGD 0LfRiywg0YHQtdGA0YLQuNGE0LjQutCw0YIuPC9mb250PjwvcD48L3RkPjwvdHI+PC90Ym9keT48 L3RhYmxlPjwvdGQ+PHRkIGJnY29sb3I9IiNGOUU5REYiPsKgPC90ZD48dGQgYmdjb2xvcj0iI0Y0 RDhDNiI+wqA8L3RkPjx0ZCBiZ2NvbG9yPSIjRjBDQUIwIj7CoDwvdGQ+PC90cj48dHI+PHRkIGJn Y29sb3I9IiNFN0E4N0UiIHdpZHRoPSI0Ij7CoDwvdGQ+PHRkIGJnY29sb3I9IiNFN0E4N0UiPsKg PC90ZD48dGQgYmdjb2xvcj0iI0Y5RTlERiI+wqA8L3RkPjx0ZCBiZ2NvbG9yPSIjRjREOEM2Ij7C oDwvdGQ+PHRkIGJnY29sb3I9IiNGMENBQjAiPsKgPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48 L2Rpdj4= From guaneryu@gmail.com Tue Aug 2 07:00:58 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 632F97CBA for ; Tue, 2 Aug 2016 07:00:58 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1897F8F8035 for ; Tue, 2 Aug 2016 05:00:55 -0700 (PDT) X-ASG-Debug-ID: 1470139252-0bf8157e6d3b5310001-NocioJ Received: from mail-pa0-f66.google.com (mail-pa0-f66.google.com [209.85.220.66]) by cuda.sgi.com with ESMTP id 9rg5GfMUjAY7fEvm (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 02 Aug 2016 05:00:52 -0700 (PDT) X-Barracuda-Envelope-From: guaneryu@gmail.com X-Barracuda-Effective-Source-IP: mail-pa0-f66.google.com[209.85.220.66] X-Barracuda-Apparent-Source-IP: 209.85.220.66 Received: by mail-pa0-f66.google.com with SMTP id q2so11865405pap.0 for ; Tue, 02 Aug 2016 05:00:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=aL3VGbqFF7iaM90WryJeH7ia9mUoiBsTK0njnPToLos=; b=dHSnoI4VbhVDkUAufEZjQEfttk+7evgdL4J/T14pb1mDGAQhr56Cycwcq9a7N8b8J+ GXHPSpqa4qz9/d7ItrcXp4hPFM9N/ndY5oXdQph1IG96B6EF2Fpg5gkGTl/ujlr/Rk6h Hl8CQFR0ucNNzW2aMuZmh9LvIt4tMuEVcN5Mm4RcDB2uOWLjnoxkUikGxrgc8cF+x/Lf A9JcsKgAMNrBFaIUDv/y5JJsp6tYKF5IdmCPsWH9vkLXKF6aP713qqVUrSkHP/tovfNH Pv9XzgT09EnWtCh6iF78XJqPuQrWXeq34aDpLmKIpvtiPCv6dM7uWmGKkIlf5hlOywVx SgyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=aL3VGbqFF7iaM90WryJeH7ia9mUoiBsTK0njnPToLos=; b=VaskvkDKU5zHZ7adUjSw9zeNYXjwGzkN/jjPeH/7pBnnfrsOx9DkK+r/YIscPcr7yf UpTU/nKajH8Z66y0QL9sVadOz3jYuiduurBG4wqId7WUl0t1SRgjshHoAd7q5RD+nX7s wB9VB0A1MlD6HyiSYuKH88fU8HV9h3E+93oqN8Z3BtsSsuYM7ZAl2PYhypTV6HXqG0Os 8OgCYO0XGovx6Ulk0AjISJaN5ni5s0/HTb9EpVFZDrnPE8JvTEDIQabGeSqJkupVD2DD OLwcH9dgTYAtVNuA06d7I3dtmUxAP7O0Gzd1/iIMYKzHiezQ3lmn5AAXcQowWTiLrwvT fCcw== X-Gm-Message-State: AEkoousN+y7I0MjcWSlikNH7zXr4SXbs09OL67yfkXZzVdbEqHau+Nxeoc+MnSB+lh8/1g== X-Received: by 10.66.42.33 with SMTP id k1mr104915927pal.111.1470139251970; Tue, 02 Aug 2016 05:00:51 -0700 (PDT) Received: from localhost ([128.199.137.77]) by smtp.gmail.com with ESMTPSA id c8sm4425215pfe.39.2016.08.02.05.00.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 02 Aug 2016 05:00:51 -0700 (PDT) From: Eryu Guan To: linux-fsdevel@vger.kernel.org Cc: Eryu Guan , Steven Whitehouse , Bob Peterson , Alexander Viro , Dave Chinner , xfs@oss.sgi.com (supporter:XFS FILESYSTEM), cluster-devel@redhat.com (open list:GFS2 FILE SYSTEM), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 RESEND] fs: return EPERM on immutable inode Date: Tue, 2 Aug 2016 19:58:28 +0800 X-ASG-Orig-Subj: [PATCH v2 RESEND] fs: return EPERM on immutable inode Message-Id: <1470139108-13115-1-git-send-email-guaneryu@gmail.com> X-Mailer: git-send-email 2.7.4 X-Barracuda-Connect: mail-pa0-f66.google.com[209.85.220.66] X-Barracuda-Start-Time: 1470139252 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2248 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature In most cases, EPERM is returned on immutable inode, and there're only a few places returning EACCES. I noticed this when running LTP on overlayfs, setxattr03 failed due to unexpected EACCES on immutable inode. So converting all EACCES to EPERM on immutable inode. Acked-by: Dave Chinner Signed-off-by: Eryu Guan --- v2: - update commit log to mention that it's found by running LTP fs/gfs2/inode.c | 2 +- fs/namei.c | 2 +- fs/utimes.c | 3 ++- fs/xfs/xfs_ioctl.c | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index e0621ca..e4da0ec 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c @@ -1800,7 +1800,7 @@ int gfs2_permission(struct inode *inode, int mask) } if ((mask & MAY_WRITE) && IS_IMMUTABLE(inode)) - error = -EACCES; + error = -EPERM; else error = generic_permission(inode, mask); if (gfs2_holder_initialized(&i_gh)) diff --git a/fs/namei.c b/fs/namei.c index c386a32..adb0414 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -410,7 +410,7 @@ int __inode_permission(struct inode *inode, int mask) * Nobody gets write access to an immutable file. */ if (IS_IMMUTABLE(inode)) - return -EACCES; + return -EPERM; /* * Updating mtime will likely cause i_uid and i_gid to be diff --git a/fs/utimes.c b/fs/utimes.c index 85c40f4..794f5f5 100644 --- a/fs/utimes.c +++ b/fs/utimes.c @@ -92,10 +92,11 @@ static int utimes_common(struct path *path, struct timespec *times) * then we need to check permissions, because * inode_change_ok() won't do it. */ - error = -EACCES; + error = -EPERM; if (IS_IMMUTABLE(inode)) goto mnt_drop_write_and_out; + error = -EACCES; if (!inode_owner_or_capable(inode)) { error = inode_permission(inode, MAY_WRITE); if (error) diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index 9a7c878..3d6820f 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -232,7 +232,7 @@ xfs_open_by_handle( } if ((fmode & FMODE_WRITE) && IS_IMMUTABLE(inode)) { - error = -EACCES; + error = -EPERM; goto out_dput; } -- 2.7.4 From BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org Tue Aug 2 07:04:13 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 883987CA0 for ; Tue, 2 Aug 2016 07:04:13 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3FE23304039 for ; Tue, 2 Aug 2016 05:04:10 -0700 (PDT) X-ASG-Debug-ID: 1470139439-0bf8157e6c3b5500001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id G4raAmj8giantdHw (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 02 Aug 2016 05:03:59 -0700 (PDT) X-Barracuda-Envelope-From: BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bUYQM-0006Ah-Is; Tue, 02 Aug 2016 12:03:54 +0000 Date: Tue, 2 Aug 2016 05:03:54 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: Christoph Hellwig , linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 08/47] xfs: support btrees with overlapping intervals for keys Message-ID: <20160802120354.GA2667@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 08/47] xfs: support btrees with overlapping intervals for keys References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907701258.25461.18255100969448497359.stgit@birch.djwong.org> <20160801064818.GJ15590@infradead.org> <20160801191126.GE8590@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801191126.GE8590@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470139439 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2479 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Mon, Aug 01, 2016 at 12:11:26PM -0700, Darrick J. Wong wrote: > > > +/* > > > + * In-core key that holds both low and high keys for overlapped btrees. > > > + * The two keys are packed next to each other on disk, so do the same > > > + * in memory. Preserve the existing xfs_btree_key as a single key to > > > + * avoid the mental model breakage that would happen if we passed a > > > + * bigkey into a function that operates on a single key. > > > + */ > > > +union xfs_btree_bigkey { > > > + struct xfs_bmbt_key bmbt; > > > + xfs_bmdr_key_t bmbr; /* bmbt root block */ > > > + xfs_alloc_key_t alloc; > > > + struct xfs_inobt_key inobt; > > > +}; > > > > I don't understand the purpose of this union at all, and the comment > > seems misleading. Compared to union xfs_btree_key the only difference > > seems to be that xfs_btree_bigkey is missing the > > 'struct xfs_rmap_key rmap' member. How does that enable us to holds > > I think you might be missing a later patch, wherein we add the rmap > stuff to the btree structures, which expands bigkey to look like this: Yeah, I was stuck in the middle of tree. I still think the bigkey is a very bad idea. There are only 7 place left that actually allocate storage for a "union xfs_btree_key". Everything else uses fancy pointer arithmetics to get them out of a disk buffer: - xfs_btree_lookup - xfs_btree_get_leaf_keys_overlapped - xfs_btree_update_keys - xfs_btree_lshift - xfs_btree_rshift - xfs_btree_simple_query_range - xfs_btree_overlapped_query_range So just adding the rmap to union xfs_btree_key would simplify things and remove a potential pitfall at the cost of just a little bit more stack usage. And at least of the init_high_key_from_rec/init_key_from_rec we could probably replace two on-stack xfs_btree_keys with a single new, bigger xfs_btree_key. > union xfs_btree_key { > struct xfs_bmbt_key bmbt; > xfs_bmdr_key_t bmbr; /* bmbt root block */ > xfs_alloc_key_t alloc; > struct xfs_inobt_key inobt; > struct xfs_rmap_key rmap[2]; > struct xfs_refcount_key refc; > }; > > This gives us the storage we want and avoids casts, but it still > doesn't fix the problem that sometimes we want to create a key pointer > to just the high fields and treat that as a pointer. Where does that problem occur? I don't quite understand how having the bigger structure is a problem if we don't want to initialize all of it. From BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org Tue Aug 2 07:23:38 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 570837CA0 for ; Tue, 2 Aug 2016 07:23:38 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 290C28F8033 for ; Tue, 2 Aug 2016 05:23:35 -0700 (PDT) X-ASG-Debug-ID: 1470140610-0bf57c13682e5e80001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id QXpQdL2ZkSBoQU1b (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 02 Aug 2016 05:23:31 -0700 (PDT) X-Barracuda-Envelope-From: BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bUYjF-0008B4-Ff; Tue, 02 Aug 2016 12:23:25 +0000 Date: Tue, 2 Aug 2016 05:23:25 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: Christoph Hellwig , linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 07/47] xfs: add function pointers for get/update keys to the btree Message-ID: <20160802122325.GA11128@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 07/47] xfs: add function pointers for get/update keys to the btree References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907700604.25461.2181974283557088355.stgit@birch.djwong.org> <20160801063902.GI15590@infradead.org> <20160801173331.GC8590@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801173331.GC8590@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470140611 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 15195 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Mon, Aug 01, 2016 at 10:33:31AM -0700, Darrick J. Wong wrote: > That's roughly the approach I took in previous versions of this patch, > but using the OVERLAPPING flag to dispatch the overlapped vs. non- > versions of the get*keys and updkey* functions confused Dave, so he > asked me to add to function pointers[1] to the btree ops and dispatch > that way. I remember I had a similar disagreement with Dave on the long vs short pointers when doing the initial common btree work, and I prevailed using the flag :) Below is a patch to on top of your for-dave-for-4.8-2 branch which uses the flag, but also keeps your useful refactoring. This both reduces source: 6 files changed, 61 insertions(+), 136 deletions(-) as well as binary: hch@brick:~/work/xfs$ size xfs.o-* text data bss dec hex filename 911881 160951 1568 1074400 1064e0 xfs.o-flag 912457 160951 1568 1074976 106720 xfs.o-pointer sizes and makes the whole thing much easier to follow and understand. diff --git a/fs/xfs/libxfs/xfs_alloc_btree.c b/fs/xfs/libxfs/xfs_alloc_btree.c index c60eeb8..5ba2dac 100644 --- a/fs/xfs/libxfs/xfs_alloc_btree.c +++ b/fs/xfs/libxfs/xfs_alloc_btree.c @@ -403,10 +403,6 @@ static const struct xfs_btree_ops xfs_allocbt_ops = { .keys_inorder = xfs_allocbt_keys_inorder, .recs_inorder = xfs_allocbt_recs_inorder, #endif - - .get_leaf_keys = xfs_btree_get_leaf_keys, - .get_node_keys = xfs_btree_get_node_keys, - .update_keys = xfs_btree_update_keys, }; /* diff --git a/fs/xfs/libxfs/xfs_bmap_btree.c b/fs/xfs/libxfs/xfs_bmap_btree.c index 9e34ca4..cd85274 100644 --- a/fs/xfs/libxfs/xfs_bmap_btree.c +++ b/fs/xfs/libxfs/xfs_bmap_btree.c @@ -763,10 +763,6 @@ static const struct xfs_btree_ops xfs_bmbt_ops = { .keys_inorder = xfs_bmbt_keys_inorder, .recs_inorder = xfs_bmbt_recs_inorder, #endif - - .get_leaf_keys = xfs_btree_get_leaf_keys, - .get_node_keys = xfs_btree_get_node_keys, - .update_keys = xfs_btree_update_keys, }; /* diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c index fe5f27e..45a9545b 100644 --- a/fs/xfs/libxfs/xfs_btree.c +++ b/fs/xfs/libxfs/xfs_btree.c @@ -1951,29 +1951,6 @@ error0: return error; } -/* Determine the low key of a leaf block (simple) */ -void -xfs_btree_get_leaf_keys( - struct xfs_btree_cur *cur, - struct xfs_btree_block *block, - union xfs_btree_key *key) -{ - union xfs_btree_rec *rec; - - rec = xfs_btree_rec_addr(cur, 1, block); - cur->bc_ops->init_key_from_rec(key, rec); -} - -/* Determine the low key of a node block (simple) */ -void -xfs_btree_get_node_keys( - struct xfs_btree_cur *cur, - struct xfs_btree_block *block, - union xfs_btree_key *key) -{ - memcpy(key, xfs_btree_key_addr(cur, 1, block), cur->bc_ops->key_len); -} - /* Find the high key storage area from a regular key. */ STATIC union xfs_btree_key * xfs_btree_high_key_from_key( @@ -1985,38 +1962,41 @@ xfs_btree_high_key_from_key( (cur->bc_ops->key_len / 2)); } -/* Determine the low and high keys of a leaf block (overlapped) */ -void -xfs_btree_get_leaf_keys_overlapped( +/* Determine the low (and high if overlapped) key of a leaf block */ +STATIC void +xfs_btree_get_leaf_keys( struct xfs_btree_cur *cur, struct xfs_btree_block *block, union xfs_btree_key *key) { - int n; union xfs_btree_rec *rec; - union xfs_btree_key max_hkey; - union xfs_btree_key hkey; - union xfs_btree_key *high; - ASSERT(cur->bc_flags & XFS_BTREE_OVERLAPPING); rec = xfs_btree_rec_addr(cur, 1, block); cur->bc_ops->init_key_from_rec(key, rec); - cur->bc_ops->init_high_key_from_rec(&max_hkey, rec); - for (n = 2; n <= xfs_btree_get_numrecs(block); n++) { - rec = xfs_btree_rec_addr(cur, n, block); - cur->bc_ops->init_high_key_from_rec(&hkey, rec); - if (cur->bc_ops->diff_two_keys(cur, &hkey, &max_hkey) > 0) - max_hkey = hkey; - } + if (cur->bc_flags & XFS_BTREE_OVERLAPPING) { + union xfs_btree_key max_hkey; + union xfs_btree_key hkey; + union xfs_btree_key *high; + int n; + + cur->bc_ops->init_high_key_from_rec(&max_hkey, rec); + for (n = 2; n <= xfs_btree_get_numrecs(block); n++) { + rec = xfs_btree_rec_addr(cur, n, block); + cur->bc_ops->init_high_key_from_rec(&hkey, rec); + if (cur->bc_ops->diff_two_keys(cur, &hkey, &max_hkey) + > 0) + max_hkey = hkey; + } - high = xfs_btree_high_key_from_key(cur, key); - memcpy(high, &max_hkey, cur->bc_ops->key_len / 2); + high = xfs_btree_high_key_from_key(cur, key); + memcpy(high, &max_hkey, cur->bc_ops->key_len / 2); + } } /* Determine the low and high keys of a node block (overlapped) */ -void -xfs_btree_get_node_keys_overlapped( +STATIC void +xfs_btree_get_node_keys( struct xfs_btree_cur *cur, struct xfs_btree_block *block, union xfs_btree_key *key) @@ -2026,19 +2006,23 @@ xfs_btree_get_node_keys_overlapped( union xfs_btree_key *max_hkey; union xfs_btree_key *high; - ASSERT(cur->bc_flags & XFS_BTREE_OVERLAPPING); - memcpy(key, xfs_btree_key_addr(cur, 1, block), - cur->bc_ops->key_len / 2); - - max_hkey = xfs_btree_high_key_addr(cur, 1, block); - for (n = 2; n <= xfs_btree_get_numrecs(block); n++) { - hkey = xfs_btree_high_key_addr(cur, n, block); - if (cur->bc_ops->diff_two_keys(cur, hkey, max_hkey) > 0) - max_hkey = hkey; - } + if (cur->bc_flags & XFS_BTREE_OVERLAPPING) { + memcpy(key, xfs_btree_key_addr(cur, 1, block), + cur->bc_ops->key_len / 2); + + max_hkey = xfs_btree_high_key_addr(cur, 1, block); + for (n = 2; n <= xfs_btree_get_numrecs(block); n++) { + hkey = xfs_btree_high_key_addr(cur, n, block); + if (cur->bc_ops->diff_two_keys(cur, hkey, max_hkey) > 0) + max_hkey = hkey; + } - high = xfs_btree_high_key_from_key(cur, key); - memcpy(high, max_hkey, cur->bc_ops->key_len / 2); + high = xfs_btree_high_key_from_key(cur, key); + memcpy(high, max_hkey, cur->bc_ops->key_len / 2); + } else { + memcpy(key, xfs_btree_key_addr(cur, 1, block), + cur->bc_ops->key_len); + } } /* Derive the keys for any btree block. */ @@ -2049,9 +2033,9 @@ xfs_btree_get_keys( union xfs_btree_key *key) { if (be16_to_cpu(block->bb_level) == 0) - cur->bc_ops->get_leaf_keys(cur, block, key); + xfs_btree_get_leaf_keys(cur, block, key); else - cur->bc_ops->get_node_keys(cur, block, key); + xfs_btree_get_node_keys(cur, block, key); } /* @@ -2125,28 +2109,12 @@ __xfs_btree_updkeys( xfs_btree_log_keys(cur, bp, ptr, ptr); if (level + 1 >= cur->bc_nlevels) break; - cur->bc_ops->get_node_keys(cur, block, lkey); + xfs_btree_get_node_keys(cur, block, lkey); } return 0; } -/* - * Update all the keys from some level in cursor back to the root, stopping - * when we find a key pair that don't need updating. - */ -int -xfs_btree_update_keys_overlapped( - struct xfs_btree_cur *cur, - int level) -{ - struct xfs_buf *bp; - struct xfs_btree_block *block; - - block = xfs_btree_get_block(cur, level, &bp); - return __xfs_btree_updkeys(cur, level, block, bp, false); -} - /* Update all the keys from some level in cursor back to the root. */ STATIC int xfs_btree_updkeys_force( @@ -2163,7 +2131,7 @@ xfs_btree_updkeys_force( /* * Update the parent keys of the given level, progressing towards the root. */ -int +STATIC int xfs_btree_update_keys( struct xfs_btree_cur *cur, int level) @@ -2174,20 +2142,21 @@ xfs_btree_update_keys( union xfs_btree_key key; int ptr; - ASSERT(!(cur->bc_flags & XFS_BTREE_OVERLAPPING)); + ASSERT(level >= 0); + + block = xfs_btree_get_block(cur, level, &bp); + if (cur->bc_flags & XFS_BTREE_OVERLAPPING) + return __xfs_btree_updkeys(cur, level, block, bp, false); XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY); XFS_BTREE_TRACE_ARGIK(cur, level, keyp); - ASSERT(level >= 0); - /* * Go up the tree from this level toward the root. * At each level, update the key value to the value input. * Stop when we reach a level where the cursor isn't pointing * at the first entry in the block. */ - block = xfs_btree_get_block(cur, level, &bp); xfs_btree_get_keys(cur, block, &key); for (level++, ptr = 1; ptr == 1 && level < cur->bc_nlevels; level++) { #ifdef DEBUG @@ -2257,7 +2226,7 @@ xfs_btree_update( /* Pass new key value up to our parent. */ if (xfs_btree_needs_key_update(cur, ptr)) { - error = cur->bc_ops->update_keys(cur, 0); + error = xfs_btree_update_keys(cur, 0); if (error) goto error0; } @@ -2447,13 +2416,13 @@ xfs_btree_lshift( goto error1; /* Update the parent keys of the right block. */ - error = cur->bc_ops->update_keys(cur, level); + error = xfs_btree_update_keys(cur, level); if (error) goto error1; /* Update the parent high keys of the left block, if needed. */ if (tcur->bc_flags & XFS_BTREE_OVERLAPPING) { - error = tcur->bc_ops->update_keys(tcur, level); + error = xfs_btree_update_keys(tcur, level); if (error) goto error1; } @@ -2633,13 +2602,13 @@ xfs_btree_rshift( /* Update the parent high keys of the left block, if needed. */ if (cur->bc_flags & XFS_BTREE_OVERLAPPING) { - error = cur->bc_ops->update_keys(cur, level); + error = xfs_btree_update_keys(cur, level); if (error) goto error1; } /* Update the parent keys of the right block. */ - error = cur->bc_ops->update_keys(tcur, level); + error = xfs_btree_update_keys(tcur, level); if (error) goto error1; @@ -2778,7 +2747,7 @@ __xfs_btree_split( xfs_btree_log_ptrs(cur, rbp, 1, rrecs); /* Stash the keys of the new block for later insertion. */ - cur->bc_ops->get_node_keys(cur, right, key); + xfs_btree_get_node_keys(cur, right, key); } else { /* It's a leaf. Move records. */ union xfs_btree_rec *lrp; /* left record pointer */ @@ -2792,7 +2761,7 @@ __xfs_btree_split( xfs_btree_log_recs(cur, rbp, 1, rrecs); /* Stash the keys of the new block for later insertion. */ - cur->bc_ops->get_leaf_keys(cur, right, key); + xfs_btree_get_leaf_keys(cur, right, key); } /* @@ -2822,7 +2791,7 @@ __xfs_btree_split( /* Update the parent high keys of the left block, if needed. */ if (cur->bc_flags & XFS_BTREE_OVERLAPPING) { - error = cur->bc_ops->update_keys(cur, level); + error = xfs_btree_update_keys(cur, level); if (error) goto error0; } @@ -3143,9 +3112,9 @@ xfs_btree_new_root( * Get the keys for the left block's keys and put them directly * in the parent block. Do the same for the right block. */ - cur->bc_ops->get_node_keys(cur, left, + xfs_btree_get_node_keys(cur, left, xfs_btree_key_addr(cur, 1, new)); - cur->bc_ops->get_node_keys(cur, right, + xfs_btree_get_node_keys(cur, right, xfs_btree_key_addr(cur, 2, new)); } else { /* @@ -3153,9 +3122,9 @@ xfs_btree_new_root( * directly in the parent block. Do the same for the right * block. */ - cur->bc_ops->get_leaf_keys(cur, left, + xfs_btree_get_leaf_keys(cur, left, xfs_btree_key_addr(cur, 1, new)); - cur->bc_ops->get_leaf_keys(cur, right, + xfs_btree_get_leaf_keys(cur, right, xfs_btree_key_addr(cur, 2, new)); } xfs_btree_log_keys(cur, nbp, 1, 2); @@ -3434,7 +3403,7 @@ xfs_btree_insrec( if (bp && bp->b_bn != old_bn) { xfs_btree_get_keys(cur, block, lkey); } else if (xfs_btree_needs_key_update(cur, optr)) { - error = cur->bc_ops->update_keys(cur, level); + error = xfs_btree_update_keys(cur, level); if (error) goto error0; } @@ -3880,7 +3849,7 @@ xfs_btree_delrec( * key values above us in the tree. */ if (xfs_btree_needs_key_update(cur, ptr)) { - error = cur->bc_ops->update_keys(cur, level); + error = xfs_btree_update_keys(cur, level); if (error) goto error0; } diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h index 9b6d628..04d0865 100644 --- a/fs/xfs/libxfs/xfs_btree.h +++ b/fs/xfs/libxfs/xfs_btree.h @@ -214,19 +214,6 @@ struct xfs_btree_ops { union xfs_btree_rec *r1, union xfs_btree_rec *r2); #endif - - /* derive the low & high keys from the records in a leaf block */ - void (*get_leaf_keys)(struct xfs_btree_cur *cur, - struct xfs_btree_block *block, - union xfs_btree_key *key); - - /* derive the low & high keys from the keys in a node block */ - void (*get_node_keys)(struct xfs_btree_cur *cur, - struct xfs_btree_block *block, - union xfs_btree_key *key); - - /* update the parent keys of given btree level */ - int (*update_keys)(struct xfs_btree_cur *cur, int level); }; /* @@ -527,17 +514,6 @@ bool xfs_btree_sblock_verify(struct xfs_buf *bp, unsigned int max_recs); uint xfs_btree_compute_maxlevels(struct xfs_mount *mp, uint *limits, unsigned long len); -void xfs_btree_get_leaf_keys(struct xfs_btree_cur *cur, - struct xfs_btree_block *block, union xfs_btree_key *key); -void xfs_btree_get_node_keys(struct xfs_btree_cur *cur, - struct xfs_btree_block *block, union xfs_btree_key *key); -int xfs_btree_update_keys(struct xfs_btree_cur *cur, int level); -void xfs_btree_get_leaf_keys_overlapped(struct xfs_btree_cur *cur, - struct xfs_btree_block *block, union xfs_btree_key *key); -void xfs_btree_get_node_keys_overlapped(struct xfs_btree_cur *cur, - struct xfs_btree_block *block, union xfs_btree_key *key); -int xfs_btree_update_keys_overlapped(struct xfs_btree_cur *cur, int level); - /* return codes */ #define XFS_BTREE_QUERY_RANGE_CONTINUE 0 /* keep iterating */ #define XFS_BTREE_QUERY_RANGE_ABORT 1 /* stop iterating */ diff --git a/fs/xfs/libxfs/xfs_ialloc_btree.c b/fs/xfs/libxfs/xfs_ialloc_btree.c index c83691e..31ca220 100644 --- a/fs/xfs/libxfs/xfs_ialloc_btree.c +++ b/fs/xfs/libxfs/xfs_ialloc_btree.c @@ -320,10 +320,6 @@ static const struct xfs_btree_ops xfs_inobt_ops = { .keys_inorder = xfs_inobt_keys_inorder, .recs_inorder = xfs_inobt_recs_inorder, #endif - - .get_leaf_keys = xfs_btree_get_leaf_keys, - .get_node_keys = xfs_btree_get_node_keys, - .update_keys = xfs_btree_update_keys, }; static const struct xfs_btree_ops xfs_finobt_ops = { @@ -345,10 +341,6 @@ static const struct xfs_btree_ops xfs_finobt_ops = { .keys_inorder = xfs_inobt_keys_inorder, .recs_inorder = xfs_inobt_recs_inorder, #endif - - .get_leaf_keys = xfs_btree_get_leaf_keys, - .get_node_keys = xfs_btree_get_node_keys, - .update_keys = xfs_btree_update_keys, }; /* diff --git a/fs/xfs/libxfs/xfs_rmap_btree.c b/fs/xfs/libxfs/xfs_rmap_btree.c index 232450c..bc1faeb 100644 --- a/fs/xfs/libxfs/xfs_rmap_btree.c +++ b/fs/xfs/libxfs/xfs_rmap_btree.c @@ -453,10 +453,6 @@ static const struct xfs_btree_ops xfs_rmapbt_ops = { .keys_inorder = xfs_rmapbt_keys_inorder, .recs_inorder = xfs_rmapbt_recs_inorder, #endif - - .get_leaf_keys = xfs_btree_get_leaf_keys_overlapped, - .get_node_keys = xfs_btree_get_node_keys_overlapped, - .update_keys = xfs_btree_update_keys_overlapped, }; /* From BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org Tue Aug 2 07:24:11 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 E2B257CA0 for ; Tue, 2 Aug 2016 07:24:11 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 72659AC002 for ; Tue, 2 Aug 2016 05:24:11 -0700 (PDT) X-ASG-Debug-ID: 1470140648-0bf8157e6a3b75c0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id IaOJHRTsKkCrp1XA (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 02 Aug 2016 05:24:08 -0700 (PDT) X-Barracuda-Envelope-From: BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bUYjp-0008QM-O7; Tue, 02 Aug 2016 12:24:01 +0000 Date: Tue, 2 Aug 2016 05:24:01 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: Christoph Hellwig , linux-btrfs@vger.kernel.org, eguan@redhat.com, fstests@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 06/17] xfs: run xfs_repair at the end of each test Message-ID: <20160802122401.GA31492@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 06/17] xfs: run xfs_repair at the end of each test References: <146914477514.11762.3144320628851923350.stgit@birch.djwong.org> <146914481474.11762.2741429828012981240.stgit@birch.djwong.org> <20160801062719.GH596@infradead.org> <20160801170814.GA8590@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801170814.GA8590@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470140648 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 462 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS > We do have specific tests that examine the outputs of rebuilding the > indices (all the fuzzer group tests do this too); this patch enables a > test runner to expand that coverage to all tests. Running a > rebuilding xfs_repair for all the tests shook out some bugs in the > xfs_repair rmap handling code that only triggered under some of the > non-rmap non-reflink stressor tests. Ok, looks fine then: Reviewed-by: Christoph Hellwig From BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org Tue Aug 2 07:24:20 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 42D517CA0 for ; Tue, 2 Aug 2016 07:24:20 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 14B60304032 for ; Tue, 2 Aug 2016 05:24:20 -0700 (PDT) X-ASG-Debug-ID: 1470140658-0bf57c13672e5ee0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id gyEF2zKlsI9rTXFK (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 02 Aug 2016 05:24:18 -0700 (PDT) X-Barracuda-Envelope-From: BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bUYk2-0008Vk-N7; Tue, 02 Aug 2016 12:24:14 +0000 Date: Tue, 2 Aug 2016 05:24:14 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: Al Viro , Christoph Hellwig , linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH] vfs: fix return type of ioctl_file_dedupe_range Message-ID: <20160802122414.GB31492@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] vfs: fix return type of ioctl_file_dedupe_range References: <20160801171339.GB8590@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801171339.GB8590@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470140658 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 342 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Mon, Aug 01, 2016 at 10:13:39AM -0700, Darrick J. Wong wrote: > All the VFS functions in the dedupe ioctl path return int status, so > the ioctl handler ought to as well. > > Found by Coverity, CID 1350952. > > Signed-off-by: Darrick J. Wong Looks fine, Reviewed-by: Christoph Hellwig From BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org Tue Aug 2 07:25:00 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 9B3697CA0 for ; Tue, 2 Aug 2016 07:25:00 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6C23A304032 for ; Tue, 2 Aug 2016 05:25:00 -0700 (PDT) X-ASG-Debug-ID: 1470140697-0bf57b369e344970001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id RjMZaTrELjLZltSs (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 02 Aug 2016 05:24:58 -0700 (PDT) X-Barracuda-Envelope-From: BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bUYkg-0000Gt-R3; Tue, 02 Aug 2016 12:24:54 +0000 Date: Tue, 2 Aug 2016 05:24:54 -0700 From: Christoph Hellwig To: Anna Schumaker Cc: david@fromorbit.com, xfs@oss.sgi.com Subject: Re: [PATCH] xfs_io: Update man page for copy_range command Message-ID: <20160802122454.GC31492@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs_io: Update man page for copy_range command References: <20160801190042.8652-1-Anna.Schumaker@Netapp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801190042.8652-1-Anna.Schumaker@Netapp.com> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470140698 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 60 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS Looks fine, Reviewed-by: Christoph Hellwig From BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org Tue Aug 2 07:25:20 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 0D1967CA0 for ; Tue, 2 Aug 2016 07:25:20 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 86106AC003 for ; Tue, 2 Aug 2016 05:25:19 -0700 (PDT) X-ASG-Debug-ID: 1470140718-0bf8157e6c3b76e0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id De8WBbjHuxgUI7Uo (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 02 Aug 2016 05:25:18 -0700 (PDT) X-Barracuda-Envelope-From: BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bUYl3-0000zA-Nv; Tue, 02 Aug 2016 12:25:17 +0000 Date: Tue, 2 Aug 2016 05:25:17 -0700 From: Christoph Hellwig To: "Darrick J. Wong" Cc: david@fromorbit.com, xfs@oss.sgi.com Subject: Re: [PATCH] xfs: in _attrlist_by_handle, copy the cursor back to userspace Message-ID: <20160802122517.GD31492@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs: in _attrlist_by_handle, copy the cursor back to userspace References: <20160802035651.GB8593@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160802035651.GB8593@birch.djwong.org> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470140718 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 250 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Mon, Aug 01, 2016 at 08:56:51PM -0700, Darrick J. Wong wrote: > When we're iterating inode xattrs by handle, we have to copy the > cursor back to userspace so that a subsequent invocation actually > retrieves subsequent contents. Testcase? From BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org Tue Aug 2 07:27:24 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 76D7A7CA0 for ; Tue, 2 Aug 2016 07:27:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 47CFA304032 for ; Tue, 2 Aug 2016 05:27:24 -0700 (PDT) X-ASG-Debug-ID: 1470140841-0bf57b369d344aa0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id IDWmYEEVH0aaCbvi (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 02 Aug 2016 05:27:22 -0700 (PDT) X-Barracuda-Envelope-From: BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bUYn3-0001r8-2K; Tue, 02 Aug 2016 12:27:21 +0000 Date: Tue, 2 Aug 2016 05:27:21 -0700 From: Christoph Hellwig To: Zorro Lang Cc: xfs@oss.sgi.com, sandeen@redhat.com Subject: Re: [PATCH] xfs_quota: fall back silently if XFS_GETNEXTQUOTA fails Message-ID: <20160802122721.GE31492@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs_quota: fall back silently if XFS_GETNEXTQUOTA fails References: <1470120540-15135-1-git-send-email-zlang@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1470120540-15135-1-git-send-email-zlang@redhat.com> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470140841 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 581 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Tue, Aug 02, 2016 at 02:49:00PM +0800, Zorro Lang wrote: > After XFS_GETNEXTQUOTA feature has been merged into linux kernel and > xfsprogs, xfs_quota use Q_XGETNEXTQUOTA for report and dump, and > fall back to old XFS_GETQUOTA ioctl if XFS_GETNEXTQUOTA fails. > > But when XFS_GETNEXTQUOTA fails, xfs_quota print a warning as > "XFS_GETQUOTA: Invalid argument". That's due to kernel can't > recognize XFS_GETNEXTQUOTA ioctl and return EINVAL. At this time, > the warning is helpless, xfs_quota just need to fall back. We'd still want to report other errors, right? From BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org Tue Aug 2 07:28:11 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 E819B7CBA for ; Tue, 2 Aug 2016 07:28:11 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B81B7304032 for ; Tue, 2 Aug 2016 05:28:11 -0700 (PDT) X-ASG-Debug-ID: 1470140889-0bf57b369d344b20001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id iguoL0KmdEdeZoJO (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 02 Aug 2016 05:28:10 -0700 (PDT) X-Barracuda-Envelope-From: BATV+f4cd355831319c0637e0+4727+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Effective-Source-IP: UNKNOWN[198.137.202.9] X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.85_2 #1 (Red Hat Linux)) id 1bUYno-0002CO-Ow; Tue, 02 Aug 2016 12:28:08 +0000 Date: Tue, 2 Aug 2016 05:28:08 -0700 From: Christoph Hellwig To: Eryu Guan Cc: linux-fsdevel@vger.kernel.org, open list , "supporter:XFS FILESYSTEM" , "open list:GFS2 FILE SYSTEM" , Alexander Viro , Bob Peterson , Steven Whitehouse Subject: Re: [PATCH v2 RESEND] fs: return EPERM on immutable inode Message-ID: <20160802122808.GF31492@infradead.org> X-ASG-Orig-Subj: Re: [PATCH v2 RESEND] fs: return EPERM on immutable inode References: <1470139108-13115-1-git-send-email-guaneryu@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1470139108-13115-1-git-send-email-guaneryu@gmail.com> User-Agent: Mutt/1.6.1 (2016-04-27) 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: 1470140890 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 541 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Tue, Aug 02, 2016 at 07:58:28PM +0800, Eryu Guan wrote: > In most cases, EPERM is returned on immutable inode, and there're only a > few places returning EACCES. I noticed this when running LTP on > overlayfs, setxattr03 failed due to unexpected EACCES on immutable > inode. > > So converting all EACCES to EPERM on immutable inode. Looks fine, Reviewed-by: Christoph Hellwig Although maybe you'll have to split this into one patch per subsystems, as otherwise no maintainer might be enticed to pick it up. From zlang@redhat.com Tue Aug 2 08:14:34 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 11BFE7CA7 for ; Tue, 2 Aug 2016 08:14:34 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id D6736304032 for ; Tue, 2 Aug 2016 06:14:30 -0700 (PDT) X-ASG-Debug-ID: 1470143668-0bf57c13692ea350001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Cr8RkBWhfox4DiSb (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 06:14:29 -0700 (PDT) X-Barracuda-Envelope-From: zlang@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9D1108122F; Tue, 2 Aug 2016 13:14:28 +0000 (UTC) Received: from localhost (dhcp-12-196.nay.redhat.com [10.66.12.196]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72DERum004396; Tue, 2 Aug 2016 09:14:28 -0400 Date: Tue, 2 Aug 2016 21:14:27 +0800 From: Zorro Lang To: Christoph Hellwig Cc: sandeen@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH] xfs_quota: fall back silently if XFS_GETNEXTQUOTA fails Message-ID: <20160802131427.GD16413@zlang.usersys.redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfs_quota: fall back silently if XFS_GETNEXTQUOTA fails References: <1470120540-15135-1-git-send-email-zlang@redhat.com> <20160802122721.GE31492@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160802122721.GE31492@infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 02 Aug 2016 13:14:28 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470143669 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1413 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Aug 02, 2016 at 05:27:21AM -0700, Christoph Hellwig wrote: > On Tue, Aug 02, 2016 at 02:49:00PM +0800, Zorro Lang wrote: > > After XFS_GETNEXTQUOTA feature has been merged into linux kernel and > > xfsprogs, xfs_quota use Q_XGETNEXTQUOTA for report and dump, and > > fall back to old XFS_GETQUOTA ioctl if XFS_GETNEXTQUOTA fails. > > > > But when XFS_GETNEXTQUOTA fails, xfs_quota print a warning as > > "XFS_GETQUOTA: Invalid argument". That's due to kernel can't > > recognize XFS_GETNEXTQUOTA ioctl and return EINVAL. At this time, > > the warning is helpless, xfs_quota just need to fall back. > > We'd still want to report other errors, right? Yes. This patch will make xfs_quota's report and dump command report nothing if XFS_GETNEXTQUOTA fails and falls back to XFS_GETQUOTA. But if XFS_GETQUOTA fails, it'll report errors. As I mentioned in email, we don't report errors if XFS_GETNEXTQUOTA fails, or we don't report errors if kernel has no XFS_GETNEXTQUOTA feature? The first one won't report any errors from XFS_GETNEXTQUOTA call, include kernel has no this feature. So: "cmd == XFS_GETQUOTA" or "!(cmd == XFS_GETNEXTQUOTA && errno == EINVAL)" I think they all make sense. Do you have any suggestions? Thanks, Zorro > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From mixmand@zoho.com Tue Aug 2 08:14:40 2016 Return-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=HK_RANDOM_REPLYTO 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 047FF7CB1 for ; Tue, 2 Aug 2016 08:14:40 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id C8F7B304032 for ; Tue, 2 Aug 2016 06:14:39 -0700 (PDT) X-ASG-Debug-ID: 1470143677-0bf57b369b349150001-NocioJ Received: from 589187.com (589187.com [104.168.102.54]) by cuda.sgi.com with ESMTP id uH2DnJLqX3SjAXGG for ; Tue, 02 Aug 2016 06:14:37 -0700 (PDT) X-Barracuda-Envelope-From: mixmand@zoho.com X-Barracuda-Effective-Source-IP: 589187.com[104.168.102.54] X-Barracuda-Apparent-Source-IP: 104.168.102.54 To: xfs@oss.sgi.com Subject: Mobile App Development Solutions- iOS, Android, Ionic & React Native Message-ID: <51af430d3cf7f16b116fd3a8d8000b88@tedbrownmusic.com> X-ASG-Orig-Subj: Mobile App Development Solutions- iOS, Android, Ionic & React Native Date: Tue, 02 Aug 2016 14:20:30 +0200 From: "Alex Rubens" Reply-To: yuiyangs@sina.com MIME-Version: 1.0 X-Mailer-LID: 8 X-Mailer-RecptId: 10449103 X-Mailer-SID: 1557 X-Mailer-Sent-By: 1 Content-Type: text/plain; format=flowed; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Barracuda-Connect: 589187.com[104.168.102.54] X-Barracuda-Start-Time: 1470143677 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1173 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0646 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_SC0_MV0646 Custom rule MV0646 Hello, Are you seeking assistance for developing a mobile application? Or need any help in identifying the right technology/ platform for launching your idea? We have a global clientele and extensive repertoire since 2011 in delivering Mobile App Solutions. Top enterprises and start-ups choose Solution Analysts as their preferred vendor for their dream projects. It’s your turn now. We are based in India. Our human resource base comprises of more than 90 tech experts who will help you set up a dedicated team that will deliver your solution exactly to the brief. Our App Development offerings are: • iOS App Development on Swift • Android App development • Cross Platform App Development: Ionic, React Native, PhoneGap Honest Numbers that will swing your opinion to start working with us: • 5+ years experience • 187+ Mobile apps delivered • 7+ Android & iOS SDK developed • 100% quality assurance • 85+ Testing Devices • 90+ Professional Developers and Designers We are ready to deliver you awesome mobile apps. Looking forward to your response and addressing your business needs. Sincerely, Alex Rubens From jeffm@suse.com Tue Aug 2 08:20:30 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 B34CA7CA7 for ; Tue, 2 Aug 2016 08:20:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7EF6F8F8035 for ; Tue, 2 Aug 2016 06:20:30 -0700 (PDT) X-ASG-Debug-ID: 1470144026-0bf57b369c349900001-NocioJ Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id ZyqTAH5fprQGkLWm (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO) for ; Tue, 02 Aug 2016 06:20:28 -0700 (PDT) X-Barracuda-Envelope-From: jeffm@suse.com X-Barracuda-Effective-Source-IP: mx2.suse.de[195.135.220.15] 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 4EA69ABC9 for ; Tue, 2 Aug 2016 13:20:26 +0000 (UTC) To: xfs@oss.sgi.com From: Jeff Mahoney Subject: Old bugs in xfsprogs? Message-ID: <7e185931-8830-5f31-7abb-5419bb255991@suse.com> X-ASG-Orig-Subj: Old bugs in xfsprogs? Date: Tue, 2 Aug 2016 09:20:22 -0400 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="ec8K5VL5fk6GuveFqfwfAPxxF0jhJRIk7" X-Barracuda-Connect: mx2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1470144027 X-Barracuda-Encrypted: ECDHE-RSA-AES256-SHA X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-ASG-Orig-Subj: Old bugs in xfsprogs? X-Barracuda-Scan-Msg-Size: 2566 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --ec8K5VL5fk6GuveFqfwfAPxxF0jhJRIk7 Content-Type: multipart/mixed; boundary="exDkSN8ViMSwQtfv8lh2kUx0xVrvueI6C" From: Jeff Mahoney To: xfs@oss.sgi.com Message-ID: <7e185931-8830-5f31-7abb-5419bb255991@suse.com> Subject: Old bugs in xfsprogs? --exDkSN8ViMSwQtfv8lh2kUx0xVrvueI6C Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi all - While investigating a weird report on an internal list I found a few old commits that don't look quite right and that may be very old bugs. I know it's hard to go back nearly 15 years, especially in the days where very short commit messages were still acceptable, and try to remember why certain changes happened. In this case, a weird corner case[1] would've been caught, xfs_repair would've bailed, and a file system may have survived (despite obvious user error). 1/ Commit 5000d01d212f (white space cleanup) diff --git a/libxlog/util.c b/libxlog/util.c index 7aca165..aa3093d 100644 --- a/libxlog/util.c +++ b/libxlog/util.c @@ -49,8 +49,10 @@ header_check_uuid(xfs_mount_t *mp, xlog_rec_header_t *head) printf("* ERROR: mismatched uuid in log\n" "* SB : %s\n* log: %s\n", uu_sb, uu_log); + + memcpy(&mp->m_sb.sb_uuid, head->h_fs_uuid, sizeof(uuid_t)); - return 1; + return 0; } This one may well have been intended as a repair operation or perhaps it was accidentally duplicated from another chunk in the patch. At any rate, it hides a mismatched UUID between the log and the superblock from the rest of xfs_repair. The user sees the "error" message but it carries on anyway. 2) Commit d321ceac8da (add libxlog directory.) I believe this was supposed to be as simple as pushing some functionality from logprint into a new libxlog library, but the result is that things that used to return an error no longer did. The print_exit global that was initialized to 1 in logprint is initialized to 0 in libxlog and never set. So we always print an error message but then carry on. So even if the header_check_uuid() call above would fail properly, the error is printed and then the error condition ignored. -Jeff [1] The details are still murky, but what I got was that the user ran xfs_repair -L (yup, i know) on an image file that contained partitions. It found a valid XFS superblock and then "repaired" the file system to an empty state since everything it found was "corrupt." I suspect that there was an XFS file system on the raw image file, which was then partitioned without clearing the MBR, and the expected XFS file system was created on the first partition. xfs_repair was pointed at the whole image file, discovered the old superblock, and remade the fs in its own image since nothing was at the proper locations. --=20 Jeff Mahoney SUSE Labs --exDkSN8ViMSwQtfv8lh2kUx0xVrvueI6C-- --ec8K5VL5fk6GuveFqfwfAPxxF0jhJRIk7 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.19 (Darwin) Comment: GPGTools - http://gpgtools.org iQIcBAEBAgAGBQJXoJ4XAAoJEB57S2MheeWyeeoP/0Mo5oetJ+hsqCMFTyaAD7+/ rLehRKJSAQtZTUICPhuWvT5YKNUjMuIYdcSDeDnPd0HIGW31RgDWTxlJhuTNVtpT kuo2XEFVhtUuU9T206+I8XC+kmpH2KnQrhvQOAQHl/GLMCY5DpMOJANXOmvSHlVi R4ffYVybeXo+uaLuOMLPK8bD3CV4ppwz3i5LWJvGBEwrdosNx3PTJ5fk68GDE+2E d1st+ADu988AaMDLbAOKx0jplQl0oFIGd5x7gdS/98u9BV6vA9ioe4X6c1VBrKr7 d2wfEDdJe7/8PhKO33GKAcCF2MdF12MVyYxirxToRHKX/V7yPKlywvrPeRhF/tXn qekWQpBJY1Onwgr3QB2UZMS3BdAXd7Qf5RnAioRcxjDVGMqXZAmraNzKD96jSDfq RmvGLUhst6NqKsrGDNeFltuhiBKUrdo5vOL/kI6V2DStPlMU8w4cBsXuo8560/F9 tObSlfgVGyFEuVKh2BJW6v7yUgAOedW4Vpjlf+SfPB1Jhy1q+nVjsm5kjW+J6WBE lQuu3K2JezBSFLCEqzxDgipC1aogiWBC5W3pXklqCH8msxr/M6J90N8m7NCFtg/m tQDad/Fh/0fgnaOiiBIUhvduBjI2kmOns84IjrxnNEQVfgM0MreWkSF0iraXaSFY TD6GbUx4PvwyPJ6x82LA =9vPb -----END PGP SIGNATURE----- --ec8K5VL5fk6GuveFqfwfAPxxF0jhJRIk7-- From mixmand@zoho.com Tue Aug 2 08:29:52 2016 Return-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=HK_RANDOM_REPLYTO 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 73F957CAF for ; Tue, 2 Aug 2016 08:29:52 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 44DDE8F8033 for ; Tue, 2 Aug 2016 06:29:52 -0700 (PDT) X-ASG-Debug-ID: 1470144588-0bf57b369d34a5d0001-NocioJ Received: from 589187.com (589187.com [104.168.102.54]) by cuda.sgi.com with ESMTP id PK86jL6wbgaRVcWN for ; Tue, 02 Aug 2016 06:29:49 -0700 (PDT) X-Barracuda-Envelope-From: mixmand@zoho.com X-Barracuda-Effective-Source-IP: 589187.com[104.168.102.54] X-Barracuda-Apparent-Source-IP: 104.168.102.54 To: xfs@oss.sgi.com Subject: Mobile App Development Solutions for startups, individuals & entrepreneurs Message-ID: <6d14379d1fe35687f925d1c91fceac15@tedbrownmusic.com> X-ASG-Orig-Subj: Mobile App Development Solutions for startups, individuals & entrepreneurs Date: Tue, 02 Aug 2016 14:13:13 +0200 From: "Alex Rubens" Reply-To: yuiyangs@sina.com MIME-Version: 1.0 X-Mailer-LID: 3 X-Mailer-RecptId: 4686092 X-Mailer-SID: 1664 X-Mailer-Sent-By: 1 Content-Type: text/plain; format=flowed; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Barracuda-Connect: 589187.com[104.168.102.54] X-Barracuda-Start-Time: 1470144588 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1173 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0646 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_SC0_MV0646 Custom rule MV0646 Hello, Are you seeking assistance for developing a mobile application? Or need any help in identifying the right technology/ platform for launching your idea? We have a global clientele and extensive repertoire since 2011 in delivering Mobile App Solutions. Top enterprises and start-ups choose Solution Analysts as their preferred vendor for their dream projects. It’s your turn now. We are based in India. Our human resource base comprises of more than 90 tech experts who will help you set up a dedicated team that will deliver your solution exactly to the brief. Our App Development offerings are: • iOS App Development on Swift • Android App development • Cross Platform App Development: Ionic, React Native, PhoneGap Honest Numbers that will swing your opinion to start working with us: • 5+ years experience • 187+ Mobile apps delivered • 7+ Android & iOS SDK developed • 100% quality assurance • 85+ Testing Devices • 90+ Professional Developers and Designers We are ready to deliver you awesome mobile apps. Looking forward to your response and addressing your business needs. Sincerely, Alex Rubens From bfoster@redhat.com Tue Aug 2 09:04:19 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 20A8E7CAE for ; Tue, 2 Aug 2016 09:04:19 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id C8A698F8033 for ; Tue, 2 Aug 2016 07:04:15 -0700 (PDT) X-ASG-Debug-ID: 1470146654-0bf8157e6c3c1c50001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 9TbA8vLg8Vz2b4wT (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 07:04:14 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E84484E034; Tue, 2 Aug 2016 14:04:13 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72E4DcH017478; Tue, 2 Aug 2016 10:04:13 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id EFD7A120BDC; Tue, 2 Aug 2016 10:04:12 -0400 (EDT) Date: Tue, 2 Aug 2016 10:04:12 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: Christoph Hellwig , linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 08/47] xfs: support btrees with overlapping intervals for keys Message-ID: <20160802140412.GA9205@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 08/47] xfs: support btrees with overlapping intervals for keys References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907701258.25461.18255100969448497359.stgit@birch.djwong.org> <20160801064818.GJ15590@infradead.org> <20160801191126.GE8590@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801191126.GE8590@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 02 Aug 2016 14:04:14 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470146654 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 5946 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Mon, Aug 01, 2016 at 12:11:26PM -0700, Darrick J. Wong wrote: > On Sun, Jul 31, 2016 at 11:48:18PM -0700, Christoph Hellwig wrote: ... > > > > > +++ b/fs/xfs/libxfs/xfs_btree.c ... > > I don't understand the purpose of this union at all, and the comment > > seems misleading. Compared to union xfs_btree_key the only difference > > seems to be that xfs_btree_bigkey is missing the > > 'struct xfs_rmap_key rmap' member. How does that enable us to holds > > I think you might be missing a later patch, wherein we add the rmap > stuff to the btree structures, which expands bigkey to look like this: > > union xfs_btree_bigkey { > struct xfs_bmbt_key bmbt; > xfs_bmdr_key_t bmbr; /* bmbt root block */ > xfs_alloc_key_t alloc; > struct xfs_inobt_key inobt; > struct { > struct xfs_rmap_key rmap; > struct xfs_rmap_key rmap_hi; > }; > struct xfs_refcount_key refc; > }; > > bigkey.rmap is the low key, bigkey.rmap_hi is the high key. None of > the other btrees are overlapped, so they don't get a high key. > > > low and high keys? Also every single user seems to cast it to > > xfs_btree_key which is a little odd and smells unsafe. > > On disk, the low and high keys of a pointer reside next to each other. > The btree_split code wants to store the new block's keys somewhere so > that the block can later be insrec'd into a higher btree level. It > would be convenient if this incore storage could also store the two > keys right next to each other so that we can memcpy key_len bytes from > the temporary storage into the on-disk btree block and not have to > special case that code. > > I thought about simply declaring an on-stack array of two union > xfs_btree_keys. The array is big enough to contain both keys and > eliminates the need for casting. On the other hand it's weird because > the two keys have to be aligned to xfs_rmap_key boundaries, not > xfs_btree_key, which means that the high key isn't necessarily stored > in the second array element like the code would suggest. > Thanks for writing this up... I'm wondering if we should define an in-core key structure variant similar to what we have for in-core records. That structure could encapsulate the low/high key model and use the already-defined in-core record structures (I suppose we could define tree-specific ikey variants, but I'll leave that alone for now). For example: struct xfs_btree_ikey { union xfs_bree_irec lo; union xfs_btree_irec hi; } Then define some conversion functions, tease apart the bits of the generic btree code that use the on-disk structure for in-memory storage vs. on-disk buffer references, and use the in-core structure for all instances of the former. That most certainly would mean more changes (as an indepedent patch) and tbh, it's not yet clear to me whether we'd run into other roadblocks that make it too ugly an option or just not worth it. I do feel like we're trying a bit too hard to retrofit the extra complexity of the multi-key model into the current design, however, and should try to explicitly define the multi-key model if we can find a reasonably elegant way to do so. Even passing around the xfs_btree_bigkey structure seems safer to me than pretending it's an xfs_btree_key and relying on key_len to make sure we copy the right amount of data or that we've defined bigkey in the right layers of the call stack. Thoughts? Brian > Then I thought about stuffing both low and high keys into > xfs_rmap_key like so: > > struct xfs_rmap_key { > __be32 rm_startblock; /* extent start block */ > __be64 rm_owner; /* extent owner */ > __be64 rm_offset; /* offset within the owner */ > __be32 rm_hi_startblock; /* extent start block */ > __be64 rm_hi_owner; /* extent owner */ > __be64 rm_hi_offset; /* offset within the owner */ > } __attribute__((packed)); > > But that was even uglier, because an overlapped btree has two keys > associated with a pointer, not one gigantic key. It's also a > non-starter because sometimes we want to be able to treat the high > fields as a distinct key and then feed that key to the btree key > handling functions; when we do this, the hi_ fields point past the end > of the allotted space. The overlapped query range function and the > btree scrubbers in later patches want to use high keys in this manner. > > So then there was this way: > > union xfs_btree_key { > struct xfs_bmbt_key bmbt; > xfs_bmdr_key_t bmbr; /* bmbt root block */ > xfs_alloc_key_t alloc; > struct xfs_inobt_key inobt; > struct xfs_rmap_key rmap[2]; > struct xfs_refcount_key refc; > }; > > This gives us the storage we want and avoids casts, but it still > doesn't fix the problem that sometimes we want to create a key pointer > to just the high fields and treat that as a pointer. > > So I created the separate bigkey structure to get the storage size I > wanted, and cast it to xfs_btree_key wherever it gets fed into the > other parts of the btree code. It's smelly like you say, but at least > we have a distinct type to help future us identify the three smelly > places where we do this. > > What I really wanted to do instead of bigkey was this: > > struct xfs_btree_key *key = kmalloc(cur->bc_ops->key_len); > > ...except then we have a memory allocation. > > I don't have a problem with replacing the bigkey variables > with two-element array and just living with the fact that the high key > will not be found at key[1], but I worry that future me won't remember > that subtlety. Whereas tracing the key pointers back to the bigkey on > the stack is not subtle and even better the debugger correctly locates > the high key contents. > > --D > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sales04@rds-light.pw Tue Aug 2 10:00:27 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B60977CA4 for ; Tue, 2 Aug 2016 10:00:27 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1996AAC007 for ; Tue, 2 Aug 2016 08:00:26 -0700 (PDT) X-ASG-Debug-ID: 1470150019-0bf57c13682ee120001-NocioJ Received: from server1.domain.com (server1.rds-light.pw [47.88.76.54]) by cuda.sgi.com with ESMTP id ZRTqhKnWlzPDXLO7 for ; Tue, 02 Aug 2016 08:00:20 -0700 (PDT) X-Barracuda-Envelope-From: sales04@rds-light.pw X-Barracuda-Effective-Source-IP: server1.rds-light.pw[47.88.76.54] X-Barracuda-Apparent-Source-IP: 47.88.76.54 Received: from linda (104.202.49.115) by server1.domain.com id hk2qog0e97cp for ; Tue, 2 Aug 2016 23:00:19 +0800 (envelope-from ) From: "sales05rds02@gmail.com" Subject: Re:Re:In 2017 Will Be Popular product.. To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re:Re:In 2017 Will Be Popular product.. MIME-Version: 1.0 Sender: sales04@rds-light.pw Reply-To: sales05rds02@gmail.com Date: Tue, 2 Aug 2016 23:00:22 +0800 X-Mailer: Foxmail 6, 13, 102, 15 [cn] Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 Content-Disposition: inline X-Barracuda-Connect: server1.rds-light.pw[47.88.76.54] X-Barracuda-Start-Time: 1470150020 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 14241 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.14 X-Barracuda-Spam-Status: No, SCORE=0.14 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 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31692 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 Message-Id: <20160802150026.716A01940062@cuda.sgi.com> PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv L0VOIj4NCjxIVE1MIHhtbG5zOm8gPSAidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6 b2ZmaWNlIj48SEVBRD4NCjxNRVRBIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIg aHR0cC1lcXVpdj1jb250ZW50LXR5cGU+DQo8TUVUQSBuYW1lPUdFTkVSQVRPUiBjb250ZW50PSJN U0hUTUwgOC4wMC43NjAxLjE3NTE0Ij48L0hFQUQ+DQo8Qk9EWT4NCjxQIA0Kc3R5bGU9IlRFWFQt SlVTVElGWTogaW50ZXItaWRlb2dyYXBoOyBURVhULUFMSUdOOiBqdXN0aWZ5OyBMSU5FLUhFSUdI VDogMjAwJTsgVEVYVC1JTkRFTlQ6IDBwdDsgTUFSR0lOOiAwcHQ7IFRFWFQtQVVUT1NQQUNFOiBp ZGVvZ3JhcGgtbnVtZXJpYzsgbXNvLXBhcmEtbWFyZ2luLWxlZnQ6IDAuMDAwMGdkOyBtc28tY2hh ci1pbmRlbnQtY291bnQ6IDAuMDAwMDsgbXNvLXBhZ2luYXRpb246IG5vbmUiIA0KY2xhc3M9TXNv Tm9ybWFsIGFsaWduPWp1c3RpZnk+PFNQQU4gDQpzdHlsZT0iTElORS1IRUlHSFQ6IDIwMCU7IEZP TlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVz JiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6 IDEuMDAwMHB0Ij5IaSw8L1NQQU4+PFNQQU4gDQpzdHlsZT0iTElORS1IRUlHSFQ6IDIwMCU7IEZP TlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVz JiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6 IDEuMDAwMHB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCANCnN0eWxlPSJURVhULUpVU1RJ Rlk6IGludGVyLWlkZW9ncmFwaDsgVEVYVC1BTElHTjoganVzdGlmeTsgTElORS1IRUlHSFQ6IDIw MCU7IFRFWFQtSU5ERU5UOiAwcHQ7IE1BUkdJTjogMHB0OyBURVhULUFVVE9TUEFDRTogaWRlb2dy YXBoLW51bWVyaWM7IG1zby1wYXJhLW1hcmdpbi1sZWZ0OiAwLjAwMDBnZDsgbXNvLWNoYXItaW5k ZW50LWNvdW50OiAwLjAwMDA7IG1zby1wYWdpbmF0aW9uOiBub25lIiANCmNsYXNzPU1zb05vcm1h bCBhbGlnbj1qdXN0aWZ5PjxTUEFOIA0Kc3R5bGU9IkxJTkUtSEVJR0hUOiAyMDAlOyBGT05ULUZB TUlMWTogQXJpYWw7IEZPTlQtU0laRTogMTFwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7 OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAw MDBwdCI+R29vZCANCmRheSE8L1NQQU4+PFNQQU4gDQpzdHlsZT0iTElORS1IRUlHSFQ6IDIwMCU7 IEZPTlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0OyBtc28tc3BhY2VydW46ICYjMzk7 eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5p bmc6IDEuMDAwMHB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCANCnN0eWxlPSJURVhULUpV U1RJRlk6IGludGVyLWlkZW9ncmFwaDsgVEVYVC1BTElHTjoganVzdGlmeTsgTElORS1IRUlHSFQ6 IDIwMCU7IFRFWFQtSU5ERU5UOiAwcHQ7IE1BUkdJTjogMHB0OyBURVhULUFVVE9TUEFDRTogaWRl b2dyYXBoLW51bWVyaWM7IG1zby1wYXJhLW1hcmdpbi1sZWZ0OiAwLjAwMDBnZDsgbXNvLWNoYXIt aW5kZW50LWNvdW50OiAwLjAwMDA7IG1zby1wYWdpbmF0aW9uOiBub25lIiANCmNsYXNzPU1zb05v cm1hbCBhbGlnbj1qdXN0aWZ5PjxTUEFOIA0Kc3R5bGU9IkxJTkUtSEVJR0hUOiAyMDAlOyBGT05U LUZBTUlMWTogQXJpYWw7IEZPTlQtU0laRTogMTFwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYj Mzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAx LjAwMDBwdCI+VGhpcyANCmlzJm5ic3A7TGluZGEmbmJzcDtmcm9tIFJ1aWRpc2kgbGlnaHQsV2Ug cHJvZHVjZSBMRUQgbGlnaHRzIGZvciBzZXZlcmFsIA0KeWVhcnMuPC9TUEFOPjwvUD4NCjxQIA0K c3R5bGU9IlRFWFQtSlVTVElGWTogaW50ZXItaWRlb2dyYXBoOyBURVhULUFMSUdOOiBqdXN0aWZ5 OyBMSU5FLUhFSUdIVDogMjAwJTsgVEVYVC1JTkRFTlQ6IDBwdDsgTUFSR0lOOiAwcHQ7IFRFWFQt QVVUT1NQQUNFOiBpZGVvZ3JhcGgtbnVtZXJpYzsgbXNvLXBhcmEtbWFyZ2luLWxlZnQ6IDAuMDAw MGdkOyBtc28tY2hhci1pbmRlbnQtY291bnQ6IDAuMDAwMDsgbXNvLXBhZ2luYXRpb246IG5vbmUi IA0KY2xhc3M9TXNvTm9ybWFsIGFsaWduPWp1c3RpZnk+PFNQQU4gDQpzdHlsZT0iTElORS1IRUlH SFQ6IDIwMCU7IEZPTlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0OyBtc28tc3BhY2Vy dW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1m b250LWtlcm5pbmc6IDEuMDAwMHB0Ij48L1NQQU4+Jm5ic3A7PC9QPg0KPFAgDQpzdHlsZT0iVEVY VC1KVVNUSUZZOiBpbnRlci1pZGVvZ3JhcGg7IFRFWFQtQUxJR046IGp1c3RpZnk7IExJTkUtSEVJ R0hUOiAyMDAlOyBURVhULUlOREVOVDogMHB0OyBNQVJHSU46IDBwdDsgVEVYVC1BVVRPU1BBQ0U6 IGlkZW9ncmFwaC1udW1lcmljOyBtc28tcGFyYS1tYXJnaW4tbGVmdDogMC4wMDAwZ2Q7IG1zby1j aGFyLWluZGVudC1jb3VudDogMC4wMDAwOyBtc28tcGFnaW5hdGlvbjogbm9uZSIgDQpjbGFzcz1N c29Ob3JtYWwgYWxpZ249anVzdGlmeT48Qj48U1BBTiANCnN0eWxlPSJMSU5FLUhFSUdIVDogMjAw JTsgRk9OVC1GQU1JTFk6IEFyaWFsOyBGT05ULVNJWkU6IDExcHQ7IEZPTlQtV0VJR0hUOiBib2xk OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDl rovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij4yMDE3IA0Kd2lsbCBiZSBwb3B1bGFy IHByb2R1Y3RzOjwvU1BBTj48L0I+PEI+PFNQQU4gDQpzdHlsZT0iTElORS1IRUlHSFQ6IDIwMCU7 IEZPTlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0OyBGT05ULVdFSUdIVDogYm9sZDsg bXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L 5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+PG86cD48L286cD48L1NQQU4+PC9CPjwv UD4NCjxQIA0Kc3R5bGU9IlRFWFQtSlVTVElGWTogaW50ZXItaWRlb2dyYXBoOyBURVhULUFMSUdO OiBqdXN0aWZ5OyBMSU5FLUhFSUdIVDogMjAwJTsgVEVYVC1JTkRFTlQ6IDBwdDsgTUFSR0lOOiAw cHQ7IFRFWFQtQVVUT1NQQUNFOiBpZGVvZ3JhcGgtbnVtZXJpYzsgbXNvLXBhcmEtbWFyZ2luLWxl ZnQ6IDAuMDAwMGdkOyBtc28tY2hhci1pbmRlbnQtY291bnQ6IDAuMDAwMDsgbXNvLXBhZ2luYXRp b246IG5vbmUiIA0KY2xhc3M9TXNvTm9ybWFsIGFsaWduPWp1c3RpZnk+PFNQQU4gDQpzdHlsZT0i TElORS1IRUlHSFQ6IDIwMCU7IEZPTlQtRkFNSUxZOiDlrovkvZM7IEZPTlQtU0laRTogMTFwdDsg bXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdDsg bXNvLWJpZGktZm9udC1mYW1pbHk6IEFyaWFsOyBtc28tYXNjaWktZm9udC1mYW1pbHk6IEFyaWFs OyBtc28taGFuc2ktZm9udC1mYW1pbHk6IEFyaWFsIj4xLjwvU1BBTj48U1BBTiANCnN0eWxlPSJM SU5FLUhFSUdIVDogMjAwJTsgRk9OVC1GQU1JTFk6IEFyaWFsOyBGT05ULVNJWkU6IDExcHQ7IG1z by1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9 kzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPk1vdGlvbiZuYnNwO2RpbW1lciZuYnNwO3Nl bnNvciZuYnNwO2xlZCZuYnNwO2hpZ2gmbmJzcDtiYXkmbmJzcDtsaWdodCwmbmJzcDtzYXZpbmcm bmJzcDt5b3VyJm5ic3A7ZWxlY3RyaWNpdHkmbmJzcDtjb3N0cy48L1NQQU4+PFNQQU4gDQpzdHls ZT0iTElORS1IRUlHSFQ6IDIwMCU7IEZPTlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0 OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDl rovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij48QlI+PC9TUEFOPjxTUEFOIA0Kc3R5 bGU9IkxJTkUtSEVJR0hUOiAyMDAlOyBGT05ULUZBTUlMWTogQXJpYWw7IEZPTlQtU0laRTogMTFw dDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog 5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+Mi4mbmJzcDs4MHctMjAwdyZuYnNw O2Vjb25vbWljYWwmbmJzcDt2ZXJzaW9uJm5ic3A7bGVkJm5ic3A7aGlnaCZuYnNwO2JheSZuYnNw O2xpZ2h0LiZuYnNwO3NhbGVzJm5ic3A7MjAwMDBwY3MvbW9udGg8L1NQQU4+PFNQQU4gDQpzdHls ZT0iTElORS1IRUlHSFQ6IDIwMCU7IEZPTlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0 OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDl rovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij48QlI+PC9TUEFOPjxTUEFOIA0Kc3R5 bGU9IkxJTkUtSEVJR0hUOiAyMDAlOyBGT05ULUZBTUlMWTogQXJpYWw7IEZPTlQtU0laRTogMTFw dDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog 5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+My4mbmJzcDtJUDY1Jm5ic3A7d2F0 ZXJwcm9vZiZuYnNwO2xlZCZuYnNwO2hpZ2gmbmJzcDtiYXkmbmJzcDtsaWdodCwmbmJzcDt2YXJp ZXR5Jm5ic3A7d2F5cyZuYnNwO2Fzc2VtYmx5Jm5ic3A7YW5kJm5ic3A7bXVsdGktYW5nbGUmbmJz cDtsZW5zLCZuYnNwO3dpZGVseSZuYnNwO3VzZWQmbmJzcDtpbiZuYnNwO2FsbCZuYnNwO2tpbmRz Jm5ic3A7b2YmbmJzcDtwbGFjZS48L1NQQU4+PFNQQU4gDQpzdHlsZT0iTElORS1IRUlHSFQ6IDIw MCU7IEZPTlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0OyBtc28tc3BhY2VydW46ICYj Mzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtl cm5pbmc6IDEuMDAwMHB0Ij48QlI+PC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkxJTkUtSEVJR0hUOiAy MDAlOyBGT05ULUZBTUlMWTogQXJpYWw7IEZPTlQtU0laRTogMTFwdDsgbXNvLXNwYWNlcnVuOiAm IzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1r ZXJuaW5nOiAxLjAwMDBwdCI+NC4mbmJzcDtMZWQmbmJzcDtsaW5lYXImbmJzcDtsaWdodCZuYnNw O3doaWNoJm5ic3A7d2lsbCZuYnNwO3JlcGxhY2UmbmJzcDtvZiZuYnNwO3R1YmUsJm5ic3A7cGFu ZWwmbmJzcDtsaWdodCwmbmJzcDtjYW4mbmJzcDthY2hpZXZlJm5ic3A7dGhlJm5ic3A7ZG9ja2lu ZywmbmJzcDtkaW1tZXIsJm5ic3A7bXVsdGktYW5nbGUmbmJzcDtyZXF1ZXN0Jm5ic3A7YW5kJm5i c3A7c28mbmJzcDtvbi48L1NQQU4+PFNQQU4gDQpzdHlsZT0iTElORS1IRUlHSFQ6IDIwMCU7IEZP TlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVz JiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6 IDEuMDAwMHB0Ij48QlI+PC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkxJTkUtSEVJR0hUOiAyMDAlOyBG T05ULUZBTUlMWTogQXJpYWw7IEZPTlQtU0laRTogMTFwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3ll cyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5n OiAxLjAwMDBwdCI+NS4mbmJzcDtTbGltJm5ic3A7bGVkJm5ic3A7Zmxvb2QmbmJzcDtsaWdodCwm bmJzcDtXaWRlJm5ic3A7cG93ZXImbmJzcDsxMHctMjAwdyxjYW4mbmJzcDtzYXZlJm5ic3A7eW91 ciZuYnNwO3RyYW5zcG9ydGF0aW9uJm5ic3A7Y29zdC4mbmJzcDsgDQo8L1NQQU4+PC9QPjxTUEFO IA0Kc3R5bGU9IkxJTkUtSEVJR0hUOiAyMDAlOyBGT05ULUZBTUlMWTogQXJpYWw7IEZPTlQtU0la RTogMTFwdDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZh bWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+PFNQQU4gDQpzdHlsZT0i TElORS1IRUlHSFQ6IDIwMCU7IEZPTlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0OyBt c28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovk vZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij4NCjxQIA0Kc3R5bGU9IlRFWFQtSlVTVElG WTogaW50ZXItaWRlb2dyYXBoOyBURVhULUFMSUdOOiBqdXN0aWZ5OyBMSU5FLUhFSUdIVDogMjAw JTsgVEVYVC1JTkRFTlQ6IDBwdDsgTUFSR0lOOiAwcHQ7IFRFWFQtQVVUT1NQQUNFOiBpZGVvZ3Jh cGgtbnVtZXJpYzsgbXNvLXBhcmEtbWFyZ2luLWxlZnQ6IDAuMDAwMGdkOyBtc28tY2hhci1pbmRl bnQtY291bnQ6IDAuMDAwMDsgbXNvLXBhZ2luYXRpb246IG5vbmUiIA0KY2xhc3M9TXNvTm9ybWFs IGFsaWduPWp1c3RpZnk+PFNQQU4gDQpzdHlsZT0iTElORS1IRUlHSFQ6IDIwMCU7IEZPTlQtRkFN SUxZOiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7 IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAw MHB0Ij5MZXQgDQptZSBrbm93IGlmIHlvdSBhcmUgaW50ZXJlc3RlZCx3ZSBzZW5kIDxTVFJPTkc+ Y2F0YWxvZzwvU1RST05HPiB0byB5b3UgDQpzb29uLjwvU1BBTj48L1A+DQo8UCANCnN0eWxlPSJU RVhULUpVU1RJRlk6IGludGVyLWlkZW9ncmFwaDsgVEVYVC1BTElHTjoganVzdGlmeTsgTElORS1I RUlHSFQ6IDIwMCU7IFRFWFQtSU5ERU5UOiAwcHQ7IE1BUkdJTjogMHB0OyBURVhULUFVVE9TUEFD RTogaWRlb2dyYXBoLW51bWVyaWM7IG1zby1wYXJhLW1hcmdpbi1sZWZ0OiAwLjAwMDBnZDsgbXNv LWNoYXItaW5kZW50LWNvdW50OiAwLjAwMDA7IG1zby1wYWdpbmF0aW9uOiBub25lIiANCmNsYXNz PU1zb05vcm1hbCBhbGlnbj1qdXN0aWZ5PjxTUEFOIA0Kc3R5bGU9IkxJTkUtSEVJR0hUOiAyMDAl OyBGT05ULUZBTUlMWTogQXJpYWw7IEZPTlQtU0laRTogMTFwdDsgbXNvLXNwYWNlcnVuOiAmIzM5 O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJu aW5nOiAxLjAwMDBwdCI+VGhhbmsgDQp5b3UhPC9TUEFOPjwvUD4NCjxQIA0Kc3R5bGU9IlRFWFQt SlVTVElGWTogaW50ZXItaWRlb2dyYXBoOyBURVhULUFMSUdOOiBqdXN0aWZ5OyBMSU5FLUhFSUdI VDogMjAwJTsgVEVYVC1JTkRFTlQ6IDBwdDsgTUFSR0lOOiAwcHQ7IFRFWFQtQVVUT1NQQUNFOiBp ZGVvZ3JhcGgtbnVtZXJpYzsgbXNvLXBhcmEtbWFyZ2luLWxlZnQ6IDAuMDAwMGdkOyBtc28tY2hh ci1pbmRlbnQtY291bnQ6IDAuMDAwMDsgbXNvLXBhZ2luYXRpb246IG5vbmUiIA0KY2xhc3M9TXNv Tm9ybWFsIGFsaWduPWp1c3RpZnk+PFNQQU4gDQpzdHlsZT0iTElORS1IRUlHSFQ6IDIwMCU7IEZP TlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVz JiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6 IDEuMDAwMHB0Ij48L1NQQU4+Jm5ic3A7PC9QPg0KPFAgDQpzdHlsZT0iVEVYVC1KVVNUSUZZOiBp bnRlci1pZGVvZ3JhcGg7IFRFWFQtQUxJR046IGp1c3RpZnk7IExJTkUtSEVJR0hUOiAyMDAlOyBU RVhULUlOREVOVDogMHB0OyBNQVJHSU46IDBwdDsgVEVYVC1BVVRPU1BBQ0U6IGlkZW9ncmFwaC1u dW1lcmljOyBtc28tcGFyYS1tYXJnaW4tbGVmdDogMC4wMDAwZ2Q7IG1zby1jaGFyLWluZGVudC1j b3VudDogMC4wMDAwOyBtc28tcGFnaW5hdGlvbjogbm9uZSIgDQpjbGFzcz1Nc29Ob3JtYWwgYWxp Z249anVzdGlmeT48L1NQQU4+PC9TUEFOPiZuYnNwOzwvUD4NCjxQIA0Kc3R5bGU9IlRFWFQtSlVT VElGWTogaW50ZXItaWRlb2dyYXBoOyBURVhULUFMSUdOOiBqdXN0aWZ5OyBMSU5FLUhFSUdIVDog MjAwJTsgVEVYVC1JTkRFTlQ6IDBwdDsgTUFSR0lOOiAwcHQ7IFRFWFQtQVVUT1NQQUNFOiBpZGVv Z3JhcGgtbnVtZXJpYzsgbXNvLXBhcmEtbWFyZ2luLWxlZnQ6IDAuMDAwMGdkOyBtc28tY2hhci1p bmRlbnQtY291bnQ6IDAuMDAwMDsgbXNvLXBhZ2luYXRpb246IG5vbmUiIA0KY2xhc3M9TXNvTm9y bWFsIGFsaWduPWp1c3RpZnk+Jm5ic3A7PC9QPjxTUEFOIA0Kc3R5bGU9IkxJTkUtSEVJR0hUOiAy MDAlOyBGT05ULUZBTUlMWTogQXJpYWw7IEZPTlQtU0laRTogMTFwdDsgbXNvLXNwYWNlcnVuOiAm IzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1r ZXJuaW5nOiAxLjAwMDBwdCI+DQo8UCBzdHlsZT0iVEVYVC1BTElHTjogbGVmdDsgTUFSR0lOOiAw cHQ7IG1zby1wYWdpbmF0aW9uOiB3aWRvdy1vcnBoYW4iIA0KY2xhc3M9TXNvTm9ybWFsPjxTUEFO IA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiBBcmlhbDsgQ09MT1I6IHJnYigwLDAsMCk7IEZPTlQtU0la RTogMTFwdDsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7 OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5b6u6L2v6ZuF6buROyBtc28tZm9udC1rZXJuaW5n OiAwLjAwMDBwdCI+VGhhbmtzIA0KJmFtcDsgQmVzdCByZWdhcmRzPC9TUEFOPjxTUEFOIA0Kc3R5 bGU9IkZPTlQtRkFNSUxZOiBBcmlhbDsgQ09MT1I6IHJnYigwLDAsMCk7IEZPTlQtU0laRTogMTFw dDsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28t ZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAwLjAwMDBwdCI+ LDwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7IEZPTlQtU0laRTogMTFw dDsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28t ZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+ PG86cD48L286cD48L1NQQU4+PC9QPg0KPFAgDQpzdHlsZT0iVEVYVC1BTElHTjogbGVmdDsgTElO RS1IRUlHSFQ6IDEycHQ7IE1BUkdJTjogNy41cHQgNy41cHQgNy41cHQgMHB0OyBtc28tcGFnaW5h dGlvbjogd2lkb3ctb3JwaGFuIiANCmNsYXNzPU1zb05vcm1hbD48U1BBTiANCnN0eWxlPSJGT05U LUZBTUlMWTogQXJpYWw7IENPTE9SOiByZ2IoMCwwLDApOyBGT05ULVNJWkU6IDExcHQ7IEZPTlQt V0VJR0hUOiBub3JtYWw7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3Qt Zm9udC1mYW1pbHk6IOW+rui9r+mbhem7kTsgbXNvLWZvbnQta2VybmluZzogMC4wMDAwcHQiIA0K Y2xhc3M9MTU+TGluZGEgLyBNYW5hZ2VyPC9TUEFOPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZ OiBBcmlhbDsgRk9OVC1TSVpFOiAxMXB0OyBGT05ULVdFSUdIVDogbm9ybWFsOyBtc28tc3BhY2Vy dW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlrovkvZM7IG1zby1m b250LWtlcm5pbmc6IDEuMDAwMHB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCANCnN0eWxl PSJURVhULUFMSUdOOiBsZWZ0OyBMSU5FLUhFSUdIVDogMTJwdDsgTUFSR0lOOiA3LjVwdCA3LjVw dCA3LjVwdCAwcHQ7IG1zby1wYWdpbmF0aW9uOiB3aWRvdy1vcnBoYW4iIA0KY2xhc3M9TXNvTm9y bWFsPjxTUEFOIA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiBBcmlhbDsgQ09MT1I6IHJnYigwLDAsMCk7 IEZPTlQtU0laRTogMTFwdDsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgbXNvLXNwYWNlcnVuOiAmIzM5 O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5b6u6L2v6ZuF6buROyBtc28tZm9u dC1rZXJuaW5nOiAwLjAwMDBwdCI+U2hlbnpoZW4gDQpSdWlkaXNpIExpZ2h0aW5nIENPLixMVEQ8 L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6IEFyaWFsOyBGT05ULVNJWkU6IDExcHQ7 IEZPTlQtV0VJR0hUOiBub3JtYWw7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZh cmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2VybmluZzogMS4wMDAwcHQiPjxv OnA+PC9vOnA+PC9TUEFOPjwvUD48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7IENP TE9SOiByZ2IoMCwwLDApOyBGT05ULVNJWkU6IDExcHQ7IEZPTlQtV0VJR0hUOiBub3JtYWw7IG1z by1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOW+rui9 r+mbhem7kTsgbXNvLWZvbnQta2VybmluZzogMC4wMDAwcHQiPg0KPFAgDQpzdHlsZT0iVEVYVC1B TElHTjogbGVmdDsgTElORS1IRUlHSFQ6IDEycHQ7IE1BUkdJTjogNy41cHQgNy41cHQgNy41cHQg MHB0OyBtc28tcGFnaW5hdGlvbjogd2lkb3ctb3JwaGFuIiANCmNsYXNzPU1zb05vcm1hbD48U1BB TiANCnN0eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7IENPTE9SOiByZ2IoMCwwLDApOyBGT05ULVNJ WkU6IDExcHQ7IEZPTlQtV0VJR0hUOiBub3JtYWw7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5 OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOW+rui9r+mbhem7kTsgbXNvLWZvbnQta2Vybmlu ZzogMC4wMDAwcHQiPldoYXRzYXBwOiANCis4Ni0xMzcyMzc2OTYwNzwvU1BBTj48U1BBTiANCnN0 eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7IEZPTlQtU0laRTogMTFwdDsgRk9OVC1XRUlHSFQ6IG5v cm1hbDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWls eTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+PG86cD48L286cD48L1NQQU4+ PC9QPg0KPFAgDQpzdHlsZT0iVEVYVC1BTElHTjogbGVmdDsgTElORS1IRUlHSFQ6IDEycHQ7IE1B UkdJTjogNy41cHQgNy41cHQgNy41cHQgMHB0OyBtc28tcGFnaW5hdGlvbjogd2lkb3ctb3JwaGFu IiANCmNsYXNzPU1zb05vcm1hbD48L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6IEFy aWFsOyBDT0xPUjogcmdiKDAsMCwwKTsgRk9OVC1TSVpFOiAxMXB0OyBGT05ULVdFSUdIVDogbm9y bWFsOyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5 OiDlvq7ova/pm4Xpu5E7IG1zby1mb250LWtlcm5pbmc6IDAuMDAwMHB0Ij5UZWw6IA0KKzg2IDc1 NSAyODkwOTUyMzwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7IEZPTlQt U0laRTogMTFwdDsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYj Mzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28tZm9udC1rZXJuaW5nOiAx LjAwMDBwdCI+PG86cD48L286cD48L1NQQU4+PC9QPg0KPFAgDQpzdHlsZT0iVEVYVC1BTElHTjog bGVmdDsgTElORS1IRUlHSFQ6IDEycHQ7IE1BUkdJTjogNy41cHQgNy41cHQgNy41cHQgMHB0OyBt c28tcGFnaW5hdGlvbjogd2lkb3ctb3JwaGFuIiANCmNsYXNzPU1zb05vcm1hbD48U1BBTiANCnN0 eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7IENPTE9SOiByZ2IoMCwwLDApOyBGT05ULVNJWkU6IDEx cHQ7IEZPTlQtV0VJR0hUOiBub3JtYWw7IG1zby1zcGFjZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNv LWZhcmVhc3QtZm9udC1mYW1pbHk6IOW+rui9r+mbhem7kTsgbXNvLWZvbnQta2VybmluZzogMC4w MDAwcHQiPlNreXBlOiANCmxpbmRhLnJkczwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlM WTogQXJpYWw7IEZPTlQtU0laRTogMTFwdDsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgbXNvLXNwYWNl cnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBtc28t Zm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+PG86cD48L286cD48L1NQQU4+PC9QPg0KPFAgDQpzdHls ZT0iVEVYVC1BTElHTjogbGVmdDsgTElORS1IRUlHSFQ6IDEycHQ7IE1BUkdJTjogNy41cHQgNy41 cHQgNy41cHQgMHB0OyBtc28tcGFnaW5hdGlvbjogd2lkb3ctb3JwaGFuIiANCmNsYXNzPU1zb05v cm1hbD48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7IEZPTlQtU0laRTogMTFwdDsg Rk9OVC1XRUlHSFQ6IG5vcm1hbDsgbXNvLXNwYWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFy ZWFzdC1mb250LWZhbWlseTog5b6u6L2v6ZuF6buROyBtc28tZm9udC1rZXJuaW5nOiAxLjAwMDBw dCI+aHR0cDovL3d3dy5yZHMtbGVkLmNvbS88L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1J TFk6IEFyaWFsOyBGT05ULVNJWkU6IDExcHQ7IEZPTlQtV0VJR0hUOiBub3JtYWw7IG1zby1zcGFj ZXJ1bjogJiMzOTt5ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNv LWZvbnQta2VybmluZzogMS4wMDAwcHQiPjxvOnA+PC9vOnA+PC9TUEFOPjwvUD4NCjxQIA0Kc3R5 bGU9IlRFWFQtQUxJR046IGxlZnQ7IExJTkUtSEVJR0hUOiAxMnB0OyBNQVJHSU46IDcuNXB0IDcu NXB0IDcuNXB0IDBwdDsgbXNvLXBhZ2luYXRpb246IHdpZG93LW9ycGhhbiIgDQpjbGFzcz1Nc29O b3JtYWw+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6IEFyaWFsOyBDT0xPUjogcmdiKDAsMCww KTsgRk9OVC1TSVpFOiAxMXB0OyBGT05ULVdFSUdIVDogbm9ybWFsOyBtc28tc3BhY2VydW46ICYj Mzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlvq7ova/pm4Xpu5E7IG1zby1m b250LWtlcm5pbmc6IDAuMDAwMHB0Ij5BZGQ6IA0KMy9GIFNpbGljb24gVmFsbGV5IFBvd2VyIElu ZHVzdHJpYWwgUGFyayw8L1NQQU4+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6IEFyaWFsOyBG T05ULVNJWkU6IDExcHQ7IEZPTlQtV0VJR0hUOiBub3JtYWw7IG1zby1zcGFjZXJ1bjogJiMzOTt5 ZXMmIzM5OzsgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IOWui+S9kzsgbXNvLWZvbnQta2Vybmlu ZzogMS4wMDAwcHQiPjxvOnA+PC9vOnA+PC9TUEFOPjwvUD4NCjxQIA0Kc3R5bGU9IlRFWFQtQUxJ R046IGxlZnQ7IExJTkUtSEVJR0hUOiAxMnB0OyBNQVJHSU46IDcuNXB0IDcuNXB0IDcuNXB0IDBw dDsgbXNvLXBhZ2luYXRpb246IHdpZG93LW9ycGhhbiIgDQpjbGFzcz1Nc29Ob3JtYWw+PFNQQU4g DQpzdHlsZT0iRk9OVC1GQU1JTFk6IEFyaWFsOyBDT0xPUjogcmdiKDAsMCwwKTsgRk9OVC1TSVpF OiAxMXB0OyBGT05ULVdFSUdIVDogbm9ybWFsOyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7 IG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiDlvq7ova/pm4Xpu5E7IG1zby1mb250LWtlcm5pbmc6 IDAuMDAwMHB0Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtMb25naHVhIA0KQmFvJiMz OTthbiBEaXN0cmljdCxzaGVuemhlbixjaGluYTwvU1BBTj48U1BBTiANCnN0eWxlPSJGT05ULUZB TUlMWTogQXJpYWw7IEZPTlQtU0laRTogMTFwdDsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgbXNvLXNw YWNlcnVuOiAmIzM5O3llcyYjMzk7OyBtc28tZmFyZWFzdC1mb250LWZhbWlseTog5a6L5L2TOyBt c28tZm9udC1rZXJuaW5nOiAxLjAwMDBwdCI+PG86cD48L286cD48L1NQQU4+PC9QPg0KPFAgDQpz dHlsZT0iVEVYVC1KVVNUSUZZOiBpbnRlci1pZGVvZ3JhcGg7IFRFWFQtQUxJR046IGp1c3RpZnk7 IExJTkUtSEVJR0hUOiAyMDAlOyBURVhULUlOREVOVDogMHB0OyBNQVJHSU46IDBwdDsgVEVYVC1B VVRPU1BBQ0U6IGlkZW9ncmFwaC1udW1lcmljOyBtc28tcGFyYS1tYXJnaW4tbGVmdDogMC4wMDAw Z2Q7IG1zby1jaGFyLWluZGVudC1jb3VudDogMC4wMDAwOyBtc28tcGFnaW5hdGlvbjogbm9uZSIg DQpjbGFzcz1Nc29Ob3JtYWwgYWxpZ249anVzdGlmeT48IS0tRW5kRnJhZ21lbnQtLT48L1NQQU4+ PFNQQU4gDQpzdHlsZT0iTElORS1IRUlHSFQ6IDIwMCU7IEZPTlQtRkFNSUxZOiBBcmlhbDsgRk9O VC1TSVpFOiAxMXB0OyBtc28tc3BhY2VydW46ICYjMzk7eWVzJiMzOTs7IG1zby1mYXJlYXN0LWZv bnQtZmFtaWx5OiDlrovkvZM7IG1zby1mb250LWtlcm5pbmc6IDEuMDAwMHB0Ij48bzpwPjwvbzpw PjwvU1BBTj48L1A+PCEtLUVuZEZyYWdtZW50LS0+PC9CT0RZPjwvSFRNTD4NCg0K From sandeen@sandeen.net Tue Aug 2 10:00:45 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 40C587CB1 for ; Tue, 2 Aug 2016 10:00:45 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id E9CB08F8039 for ; Tue, 2 Aug 2016 08:00:44 -0700 (PDT) X-ASG-Debug-ID: 1470150041-0bf8157e6a3c4020001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id XzsRGeC6x7iVZghR for ; Tue, 02 Aug 2016 08:00:41 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Effective-Source-IP: sandeen.net[63.231.237.45] X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from [10.0.0.4] (liberator [10.0.0.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 0D5244AC133 for ; Tue, 2 Aug 2016 10:00:41 -0500 (CDT) Subject: Re: Old bugs in xfsprogs? To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Old bugs in xfsprogs? References: <7e185931-8830-5f31-7abb-5419bb255991@suse.com> From: Eric Sandeen Message-ID: <626eedea-2b9a-4ca3-cd3d-1e528f45526f@sandeen.net> Date: Tue, 2 Aug 2016 10:00:31 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <7e185931-8830-5f31-7abb-5419bb255991@suse.com> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="iLBvSeQx8lh6327t3Tg3qwh5oF1C4gT3u" X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1470150041 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-ASG-Orig-Subj: Re: Old bugs in xfsprogs? X-Barracuda-Scan-Msg-Size: 3826 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31693 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --iLBvSeQx8lh6327t3Tg3qwh5oF1C4gT3u Content-Type: multipart/mixed; boundary="bfplggHAvDEWDw2HAdsXMLhxxeVI54wmu" From: Eric Sandeen To: xfs@oss.sgi.com Message-ID: <626eedea-2b9a-4ca3-cd3d-1e528f45526f@sandeen.net> Subject: Re: Old bugs in xfsprogs? References: <7e185931-8830-5f31-7abb-5419bb255991@suse.com> In-Reply-To: <7e185931-8830-5f31-7abb-5419bb255991@suse.com> --bfplggHAvDEWDw2HAdsXMLhxxeVI54wmu Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable On 8/2/16 8:20 AM, Jeff Mahoney wrote: > Hi all - >=20 > While investigating a weird report on an internal list I found a few ol= d > commits that don't look quite right and that may be very old bugs. I > know it's hard to go back nearly 15 years, especially in the days where= > very short commit messages were still acceptable, and try to remember > why certain changes happened. In this case, a weird corner case[1] > would've been caught, xfs_repair would've bailed, and a file system may= > have survived (despite obvious user error). >=20 > 1/ Commit 5000d01d212f (white space cleanup) Meh, not a white space cleanup, is it! > diff --git a/libxlog/util.c b/libxlog/util.c > index 7aca165..aa3093d 100644 > --- a/libxlog/util.c > +++ b/libxlog/util.c > @@ -49,8 +49,10 @@ header_check_uuid(xfs_mount_t *mp, xlog_rec_header_t= > *head) > printf("* ERROR: mismatched uuid in log\n" > "* SB : %s\n* log: %s\n", > uu_sb, uu_log); > + > + memcpy(&mp->m_sb.sb_uuid, head->h_fs_uuid, sizeof(uuid_t)); >=20 > - return 1; > + return 0; > } However, after seeing the mismatch, it "fixes" it by copying the header uuid into the mount point uuid. But that doesn't seem like the right approach at all, and it renders all the callers who check the return value of header_check_uuid pointless. So yeah, doesn't look good to me. > This one may well have been intended as a repair operation or perhaps i= t > was accidentally duplicated from another chunk in the patch. At any > rate, it hides a mismatched UUID between the log and the superblock fro= m > the rest of xfs_repair. The user sees the "error" message but it > carries on anyway. >=20 > 2) Commit d321ceac8da (add libxlog directory.) >=20 > I believe this was supposed to be as simple as pushing some > functionality from logprint into a new libxlog library, but the result > is that things that used to return an error no longer did. The > print_exit global that was initialized to 1 in logprint is initialized > to 0 in libxlog and never set. So we always print an error message but= > then carry on. So even if the header_check_uuid() call above would fai= l > properly, the error is printed and then the error condition ignored. Sigh, yeah, the old commits are wild west. :( In this case header_check_uuid returned 0 anyway,so print_exit would not have helped, but I think you're right. A perfect storm of derp. ;) > -Jeff >=20 > [1] The details are still murky, but what I got was that the user ran > xfs_repair -L (yup, i know) on an image file that contained partitions.= > It found a valid XFS superblock and then "repaired" the file system to > an empty state since everything it found was "corrupt." I suspect that= > there was an XFS file system on the raw image file, which was then > partitioned without clearing the MBR, and the expected XFS file system > was created on the first partition. xfs_repair was pointed at the whol= e > image file, discovered the old superblock, and remade the fs in its own= > image since nothing was at the proper locations. Oh, so it found 4 matching, old, valid, superblocks? Ugh. I don't know how to protect against that, although it probably should have found a few non-matching supers along the way as well. I wonder if we should be more cautious in that case. I could imagine that maybe for each candidate super we find, we should look at its geometry, and spot-check the other locations that it indicate= s should contain a superblock. If we get enough semi-valid but conflicting= "sets," maybe we should bail out and ask. It's quite a corner case, tho.= Any chance you have full xfs_repair output? -Eric --bfplggHAvDEWDw2HAdsXMLhxxeVI54wmu-- --iLBvSeQx8lh6327t3Tg3qwh5oF1C4gT3u Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.17 (Darwin) Comment: GPGTools - http://gpgtools.org iQIcBAEBAgAGBQJXoLWYAAoJECCuFpLhPd7ggLEQAIXsnGsLvUeHDUDRHHA+R4eZ hGdgGO4sUC/9KbnAgPm1hsyYiVUIZRGoV7E1Q48xujS8B3w1p6Uvfh5ifFKj0zwa +W60KZ15B03TFs1GxQf9iXainL1O1zOLcpBQMOX2ny5/M1yc/9ReYbU8Ofby4Q7f w2zDbGHFCRiB8k9mf4iqm3bNzsf6bwMLnspntkokV8ozW7wwG4qdyhTbL1mFXzMi 3aFMSJns1Fy18gkc/K19O0qkmu0hD8vPPoVXVq8oBPHK8b9OfYh8ruKXy/5X7MQI bAwLrwsPUhGvBJLsjzguBDIcnvKX11kxl0c2MK6eQYWKLXIoM2BfgCRJVCvMt6VW +bz2lLboguWhBW6GtCtyY7dr/2LsXbqTBWAV+Q8DJIku4ENZVZC63FcZMvHIti0A 9IbMd60VMs7HqSSm/yuNvkl4QjrCmgBVlEzVipjBM1nhuqCZC7xsYh+yfOZHcNlh /J6mc6z8ruNqPchV7pEWVc0EfkU7+69ElUVbkTtsAIUpFQyjhHn88VD/g/4VXdX0 lkAyy0vfqjud8JMCD1gVFsLEJxfTOJn7wnuJZv0YtAWLa4m9yBhMi0LZ7jtxCowZ QTDKckyt3V22bA+jSqCquARQH115hRPOWvNXbhktV+KHXwIbpuAT8COeFbfCKtP5 amxG0cdtdbSC8oGLSaHj =yCyY -----END PGP SIGNATURE----- --iLBvSeQx8lh6327t3Tg3qwh5oF1C4gT3u-- From sandeen@sandeen.net Tue Aug 2 10:06:31 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 45AB77CAE for ; Tue, 2 Aug 2016 10:06:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id F17378F8039 for ; Tue, 2 Aug 2016 08:06:27 -0700 (PDT) X-ASG-Debug-ID: 1470150385-0bf8157e6c3c44b0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 8QBCfGyu6Wt7y88v for ; Tue, 02 Aug 2016 08:06:25 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Effective-Source-IP: sandeen.net[63.231.237.45] X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from [10.0.0.4] (liberator [10.0.0.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 7DADC4AC120 for ; Tue, 2 Aug 2016 10:06:25 -0500 (CDT) Subject: Re: [PATCH] xfs_quota: fall back silently if XFS_GETNEXTQUOTA fails To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfs_quota: fall back silently if XFS_GETNEXTQUOTA fails References: <1470120540-15135-1-git-send-email-zlang@redhat.com> <20160802122721.GE31492@infradead.org> From: Eric Sandeen Message-ID: Date: Tue, 2 Aug 2016 10:06:24 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <20160802122721.GE31492@infradead.org> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1470150385 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1560 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31693 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 8/2/16 7:27 AM, Christoph Hellwig wrote: > On Tue, Aug 02, 2016 at 02:49:00PM +0800, Zorro Lang wrote: >> After XFS_GETNEXTQUOTA feature has been merged into linux kernel and >> xfsprogs, xfs_quota use Q_XGETNEXTQUOTA for report and dump, and >> fall back to old XFS_GETQUOTA ioctl if XFS_GETNEXTQUOTA fails. >> >> But when XFS_GETNEXTQUOTA fails, xfs_quota print a warning as >> "XFS_GETQUOTA: Invalid argument". That's due to kernel can't >> recognize XFS_GETNEXTQUOTA ioctl and return EINVAL. At this time, >> the warning is helpless, xfs_quota just need to fall back. > > We'd still want to report other errors, right? I advised Zorro to do it this way, because -EINVAL can have a few meanings, and we don't know for sure why we got it. Could be a bad cmd, or a bad type, or ... If it fails, we're going to fall back anyway, so for any other error we'd print it twice; on the fallback, we'd print the real unexpected error anyway, so I think the user will get the relevant information in this case. But I guess we could do: + /* EINVAL is expected for XFS_GETNEXTQUOTA on older kernels */ if (xfsquotactl(cmd, dev, type, id, (void *)&d) < 0) { + if (errno != ENOENT && errno != ENOSYS && errno != ESRCH && + (cmd == XFS_GETNEXTQUOTA && errno != EINVAL) and then change what we print (not perror("XFS_GETQUOTA") in all cases)? But if we got i.e. EPERM, we'd print the EPERM error twice; once for the first call, and once for the fallback. I suppose that'd be ok, but not sure it's helpful. -Eric From darrick.wong@oracle.com Tue Aug 2 10:41:09 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4CF947CA4 for ; Tue, 2 Aug 2016 10:41:09 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id AF366AC003 for ; Tue, 2 Aug 2016 08:41:08 -0700 (PDT) X-ASG-Debug-ID: 1470152465-0bf57b369d350150001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id 8WmMVSBLJaiEFiDj (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 08:41:06 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u72FebMQ023049 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 15:40:38 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id u72FebG9001961 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 15:40:37 GMT Received: from abhmp0015.oracle.com (abhmp0015.oracle.com [141.146.116.21]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id u72FeaRP028443; Tue, 2 Aug 2016 15:40:36 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 02 Aug 2016 08:40:36 -0700 Date: Tue, 2 Aug 2016 08:40:35 -0700 From: "Darrick J. Wong" To: Christoph Hellwig Cc: david@fromorbit.com, xfs@oss.sgi.com Subject: Re: [PATCH] xfs: in _attrlist_by_handle, copy the cursor back to userspace Message-ID: <20160802154035.GI8590@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH] xfs: in _attrlist_by_handle, copy the cursor back to userspace References: <20160802035651.GB8593@birch.djwong.org> <20160802122517.GD31492@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160802122517.GD31492@infradead.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: aserv0022.oracle.com [141.146.126.234] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1470152465 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 563 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31693 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Tue, Aug 02, 2016 at 05:25:17AM -0700, Christoph Hellwig wrote: > On Mon, Aug 01, 2016 at 08:56:51PM -0700, Darrick J. Wong wrote: > > When we're iterating inode xattrs by handle, we have to copy the > > cursor back to userspace so that a subsequent invocation actually > > retrieves subsequent contents. > > Testcase? Found it while continuing development of xfs_scrub. I'll send along the xfstest patch when I've finished polishing it. (It was harder than usual since xfs_io doesn't /use/ the attr-by-handle interface... nothing does.) --D From jtulak@redhat.com Tue Aug 2 10:42:52 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 881677CA4 for ; Tue, 2 Aug 2016 10:42:52 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5A0A4304039 for ; Tue, 2 Aug 2016 08:42:52 -0700 (PDT) X-ASG-Debug-ID: 1470152567-0bf57c136a2eff70001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id bHAjLKfCukbRIApS (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 08:42:48 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 27CF361E44 for ; Tue, 2 Aug 2016 15:42:47 +0000 (UTC) Received: from jtulak.brq.redhat.com (jtulak.brq.redhat.com [10.34.26.85]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72FgjCn020921; Tue, 2 Aug 2016 11:42:46 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: Jan Tulak Subject: [RFC PATCH 0/8] mkfs: centralised conflict detection Date: Tue, 2 Aug 2016 17:42:11 +0200 X-ASG-Orig-Subj: [RFC PATCH 0/8] mkfs: centralised conflict detection Message-Id: <1470152539-18759-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 02 Aug 2016 15:42:47 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470152568 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 4261 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi guys This is set follows the earlier cleaning of mkfs by utilising the new code to do also inter-option conflicts checks, and is inspired by Dave's idea in "xfstests: Add mkfs input validation tests" thread. With these patches, adding -i attr=1 -m crc=1 conflict is as simple as: { .index = I_ATTR, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_CRC, true, 1, 1, + "V2 attribute format always enabled on CRC enabled filesytems."}, + {LAST_CONFLICT} }, And a similar change in the corresponding option. You can read it as: I_ATTR has a conflict with M_CRC depending on input values (the "true"), when M_CRC is 1 (the first 1) and I_ATTR is 1 (the second 1). Report it with message... (I should probably rewrite it to use named initialization, instead of positional.) This change should remove some other code from mkfs and make conflicts consistent. The patch set, as it is, should be mostly done. I think there are still some conflicts to be converted, and some new lines added/removed where they are not needed, but the main reason why this is RFC is an issue with defaults. Detection of conflicts in user input is working like a charm. However, if some option is conflicting with default settings, I have a problem. For example, lets look on -m crc=1 -n ftype=0. crc=1 is the default, so if the user inputs -n ftype=0 alone, it is still a conflict and the old code detects it once it loads and parses all user input. The new does not. The conflicts detecting code added in previous mkfs cleaning, which this patchset is extending, does conflicts detection at the moment it sees an option/flag, during getopt loop. Which means I can't just raise a red flag when something is in conflict with default, because it is possible that the very next option will change that default. I left the old code here and only added a comment (it is in the last patch), but there are other options with the same issue... The solutions I came up are here, but I would like to know some other people's thoughts before going for any of them. They are sorted by the amount of necessary changes. 1) Leave the old code there. This brings some duplicity, but not every option has this issue, so I think that overall it would be still a gain. 2) Do minimal changes to move the conflict checks after the getopt loop. I think that this should be possible without too many changes - I would remove all conflict-related things from getnum/getstr and instead would add a loop to go through the entire table with options after the getopt loop. So - one loop to fill the table, with user-given values, second loop to check for conflicts. 3) Rewrite conflicts from scratch and check them once everything was parsed and all options loaded. Similar to 2, but rather than making minimal changes, I would take the conflicts out of the current opt_params table and made a second table for conflicts only. This would also allow for merging the two entries necessary for every conflict (one from each side) into a single one. My thoughts about these ideas: 1 is clumsy and doesn't look correct, so I think about 2 and 3. For now, 2 would be easier, but I think also about adding range conflicts (inode size with and without crc, ...) and possibly other things and then I'm not sure which implementation would be better. I hope I described it well enough so you don't have to study every line of the code... Anyway, look on this patchset and tell me your thoughts. Thank you :-) Jan Jan Tulak (8): mkfs: remove intermediate getstr followed by getnum mkfs: merge tables for opts parsing into one table mkfs: extend opt_params with a value field mkfs: change conflicts array into a table capable of cross-option addressing mkfs: add a check for conflicting values mkfs: add cross-section conflict checks mkfs: Move opts related #define to one place mkfs: move conflicts into the table mkfs/xfs_mkfs.c | 1647 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 938 insertions(+), 709 deletions(-) -- 2.5.5 From jtulak@redhat.com Tue Aug 2 10:42:54 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 F1BA77CA6 for ; Tue, 2 Aug 2016 10:42:53 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C3351304048 for ; Tue, 2 Aug 2016 08:42:53 -0700 (PDT) X-ASG-Debug-ID: 1470152572-0bf57c13672eff80001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id uYMqsRUsihIY2zSd (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 08:42:52 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 199BA85541 for ; Tue, 2 Aug 2016 15:42:52 +0000 (UTC) Received: from jtulak.brq.redhat.com (jtulak.brq.redhat.com [10.34.26.85]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72FgjCs020921; Tue, 2 Aug 2016 11:42:51 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: Jan Tulak Subject: [PATCH 5/8] mkfs: add a check for conflicting values Date: Tue, 2 Aug 2016 17:42:16 +0200 X-ASG-Orig-Subj: [PATCH 5/8] mkfs: add a check for conflicting values Message-Id: <1470152539-18759-6-git-send-email-jtulak@redhat.com> In-Reply-To: <1470152539-18759-1-git-send-email-jtulak@redhat.com> References: <1470152539-18759-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 02 Aug 2016 15:42:52 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470152572 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2971 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Add a check that reports a conflict only when subopts are mixed with specific values. Signed-off-by: Jan Tulak --- mkfs/xfs_mkfs.c | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index b2fbc58..6f3f278 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -1289,18 +1289,18 @@ illegal_option( */ static void check_opt( - struct opt_params *opts, + struct opt_params *opt, int index, bool str_seen) { - struct subopt_param *sp = &opts->subopt_params[index]; + struct subopt_param *sp = &opt->subopt_params[index]; int i; if (sp->index != index) { fprintf(stderr, ("Developer screwed up option parsing (%d/%d)! Please report!\n"), sp->index, index); - reqval(opts->name, (char **)opts->subopts, index); + reqval(opt->name, (char **)opt->subopts, index); } /* @@ -1313,11 +1313,11 @@ check_opt( */ if (!str_seen) { if (sp->seen) - respec(opts->name, (char **)opts->subopts, index); + respec(opt->name, (char **)opt->subopts, index); sp->seen = true; } else { if (sp->str_seen) - respec(opts->name, (char **)opts->subopts, index); + respec(opt->name, (char **)opt->subopts, index); sp->str_seen = true; } @@ -1327,10 +1327,44 @@ check_opt( if (conflict_opt.opt == LAST_CONFLICT) break; - if (opts->subopt_params[conflict_opt.subopt].seen || - opts->subopt_params[conflict_opt.subopt].str_seen) - conflict(opts->name, (char **)opts->subopts, + if (conflict_opt.test_values) + break; + if (opt->subopt_params[conflict_opt.subopt].seen || + opt->subopt_params[conflict_opt.subopt].str_seen) { + conflict(opt->name, (char **)opt->subopts, conflict_opt.subopt, index); + } + } +} + +/* + * Check for conflict values between options. + */ +static void +check_opt_value( + struct opt_params *opt, + int index, + long long value) +{ + struct subopt_param *sp = &opt->subopt_params[index]; + int i; + + /* check for conflicts with the option */ + for (i = 0; i < MAX_CONFLICTS; i++) { + struct subopt_conflict conflict_opt = sp->conflicts[i]; + + if (conflict_opt.opt == LAST_CONFLICT) + break; + if (!conflict_opt.test_values) + break; + if ((opt->subopt_params[conflict_opt.subopt].seen || + opt->subopt_params[conflict_opt.subopt].str_seen) && + opt->subopt_params[conflict_opt.subopt].value + == conflict_opt.invalid_value && + value == conflict_opt.at_value) { + conflict(opt->name, (char **)opt->subopts, + conflict_opt.subopt, index); + } } } @@ -1377,6 +1411,8 @@ getnum( illegal_option(str, opts, index, NULL); } + check_opt_value(opts, index, c); + /* Validity check the result. */ if (c < sp->minval) illegal_option(str, opts, index, _("value is too small")); -- 2.5.5 From jtulak@redhat.com Tue Aug 2 10:42:54 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 C47E57CA4 for ; Tue, 2 Aug 2016 10:42:53 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 27ADEAC003 for ; Tue, 2 Aug 2016 08:42:52 -0700 (PDT) X-ASG-Debug-ID: 1470152570-0bf57c13672eff70001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id kLFy2oW0ArBBFrCp (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 08:42:50 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2CACC85367 for ; Tue, 2 Aug 2016 15:42:50 +0000 (UTC) Received: from jtulak.brq.redhat.com (jtulak.brq.redhat.com [10.34.26.85]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72FgjCq020921; Tue, 2 Aug 2016 11:42:49 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: Jan Tulak Subject: [PATCH 3/8] mkfs: extend opt_params with a value field Date: Tue, 2 Aug 2016 17:42:14 +0200 X-ASG-Orig-Subj: [PATCH 3/8] mkfs: extend opt_params with a value field Message-Id: <1470152539-18759-4-git-send-email-jtulak@redhat.com> In-Reply-To: <1470152539-18759-1-git-send-email-jtulak@redhat.com> References: <1470152539-18759-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 02 Aug 2016 15:42:50 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470152570 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 12616 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Add a new field into opt_params: value, which is filled with user input. Signed-off-by: Jan Tulak --- mkfs/xfs_mkfs.c | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 4741522..14cf7dd 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -115,6 +115,12 @@ unsigned int sectorsize; * sets what is used with simple specifying the subopt (-d file). * A special SUBOPT_NEEDS_VAL can be used to require a user-given * value in any case. + * + * value INTERNAL + * Do not set this on initialization. Use defaultval for what you want + * to do. This is filled with user input and anything you write here now + * is overwritten. (If the user input is a string and not a number, this + * value is set to a positive non-zero number.) */ struct opt_params { int index; @@ -131,6 +137,7 @@ struct opt_params { long long minval; long long maxval; long long defaultval; + long long value; } subopt_params[MAX_SUBOPTS]; } opts[MAX_OPTS] = { #define OPT_B 0 @@ -1543,12 +1550,20 @@ main( B_LOG); blocksize = 1 << blocklog; blflag = 1; + opts[OPT_B].subopt_params[B_LOG].value = + blocklog; + opts[OPT_B].subopt_params[B_SIZE].value = + blocksize; break; case B_SIZE: blocksize = getnum(value, &opts[OPT_B], B_SIZE); blocklog = libxfs_highbit32(blocksize); bsflag = 1; + opts[OPT_B].subopt_params[B_LOG].value = + blocklog; + opts[OPT_B].subopt_params[B_SIZE].value = + blocksize; break; default: unknown('b', value); @@ -1567,47 +1582,70 @@ main( agcount = getnum(value, &opts[OPT_D], D_AGCOUNT); daflag = 1; + opts[OPT_D].subopt_params[D_AGCOUNT].value = + agcount; break; case D_AGSIZE: agsize = getnum(value, &opts[OPT_D], D_AGSIZE); dasize = 1; + opts[OPT_D].subopt_params[D_AGSIZE].value = + agsize; break; case D_FILE: xi.disfile = getnum(value, &opts[OPT_D], D_FILE); + opts[OPT_D].subopt_params[D_FILE].value = + xi.disfile; break; case D_NAME: xi.dname = getstr(value, &opts[OPT_D], D_NAME); + opts[OPT_D].subopt_params[D_NAME].value = 1; break; case D_SIZE: dbytes = getnum(value, &opts[OPT_D], D_SIZE); + opts[OPT_D].subopt_params[D_SIZE].value = + dbytes; break; case D_SUNIT: dsunit = getnum(value, &opts[OPT_D], D_SUNIT); + opts[OPT_D].subopt_params[D_SUNIT].value = + dsunit; break; case D_SWIDTH: dswidth = getnum(value, &opts[OPT_D], D_SWIDTH); + opts[OPT_D].subopt_params[D_SWIDTH].value = + dswidth; break; case D_SU: dsu = getnum(value, &opts[OPT_D], D_SU); + opts[OPT_D].subopt_params[D_SU].value = + dsu; break; case D_SW: dsw = getnum(value, &opts[OPT_D], D_SW); + opts[OPT_D].subopt_params[D_SW].value = + dsw; break; case D_NOALIGN: nodsflag = getnum(value, &opts[OPT_D], D_NOALIGN); + opts[OPT_D].subopt_params[D_NOALIGN].value = + nodsflag; break; case D_SECTLOG: sectorlog = getnum(value, &opts[OPT_D], D_SECTLOG); sectorsize = 1 << sectorlog; slflag = 1; + opts[OPT_D].subopt_params[D_SECTSIZE].value = + sectorsize; + opts[OPT_D].subopt_params[D_SECTLOG].value = + sectorlog; break; case D_SECTSIZE: sectorsize = getnum(value, &opts[OPT_D], @@ -1615,6 +1653,10 @@ main( sectorlog = libxfs_highbit32(sectorsize); ssflag = 1; + opts[OPT_D].subopt_params[D_SECTSIZE].value = + sectorsize; + opts[OPT_D].subopt_params[D_SECTLOG].value = + sectorlog; break; case D_RTINHERIT: c = getnum(value, &opts[OPT_D], @@ -1622,18 +1664,24 @@ main( if (c) fsx.fsx_xflags |= XFS_DIFLAG_RTINHERIT; + opts[OPT_D].subopt_params[D_RTINHERIT].value = + c; break; case D_PROJINHERIT: fsx.fsx_projid = getnum(value, &opts[OPT_D], D_PROJINHERIT); fsx.fsx_xflags |= XFS_DIFLAG_PROJINHERIT; + opts[OPT_D].subopt_params[D_PROJINHERIT].value = + fsx.fsx_projid; break; case D_EXTSZINHERIT: fsx.fsx_extsize = getnum(value, &opts[OPT_D], D_EXTSZINHERIT); fsx.fsx_xflags |= XFS_DIFLAG_EXTSZINHERIT; + opts[OPT_D].subopt_params[D_EXTSZINHERIT].value = + fsx.fsx_extsize; break; default: unknown('d', value); @@ -1652,43 +1700,64 @@ main( sb_feat.inode_align = getnum(value, &opts[OPT_I], I_ALIGN); + opts[OPT_I].subopt_params[I_ALIGN].value = + sb_feat.inode_align; break; case I_LOG: inodelog = getnum(value, &opts[OPT_I], I_LOG); isize = 1 << inodelog; ilflag = 1; + opts[OPT_I].subopt_params[I_SIZE].value = + isize; + opts[OPT_I].subopt_params[I_LOG].value = + inodelog; break; case I_MAXPCT: imaxpct = getnum(value, &opts[OPT_I], I_MAXPCT); imflag = 1; + opts[OPT_I].subopt_params[I_MAXPCT].value = + imaxpct; break; case I_PERBLOCK: inopblock = getnum(value, &opts[OPT_I], I_PERBLOCK); ipflag = 1; + opts[OPT_I].subopt_params[I_PERBLOCK].value = + inopblock; break; case I_SIZE: isize = getnum(value, &opts[OPT_I], I_SIZE); inodelog = libxfs_highbit32(isize); isflag = 1; + opts[OPT_I].subopt_params[I_SIZE].value = + isize; + opts[OPT_I].subopt_params[I_LOG].value = + inodelog; break; case I_ATTR: sb_feat.attr_version = + getnum(value, &opts[OPT_I], I_ATTR); + opts[OPT_I].subopt_params[I_ATTR].value = + sb_feat.attr_version; break; case I_PROJID32BIT: sb_feat.projid16bit = !getnum(value, &opts[OPT_I], I_PROJID32BIT); + opts[OPT_I].subopt_params[I_PROJID32BIT].value = + sb_feat.projid16bit; break; case I_SPINODES: sb_feat.spinodes = getnum(value, &opts[OPT_I], I_SPINODES); + opts[OPT_I].subopt_params[I_SPINODES].value = + sb_feat.spinodes; break; default: unknown('i', value); @@ -1707,24 +1776,34 @@ main( logagno = getnum(value, &opts[OPT_L], L_AGNUM); laflag = 1; + opts[OPT_L].subopt_params[L_AGNUM].value = + logagno; break; case L_FILE: xi.lisfile = getnum(value, &opts[OPT_L], L_FILE); + opts[OPT_L].subopt_params[L_FILE].value = + xi.lisfile; break; case L_INTERNAL: loginternal = getnum(value, &opts[OPT_L], L_INTERNAL); liflag = 1; + opts[OPT_L].subopt_params[L_INTERNAL].value = + loginternal; break; case L_SU: lsu = getnum(value, &opts[OPT_L], L_SU); lsuflag = 1; + opts[OPT_L].subopt_params[L_SU].value = + lsu; break; case L_SUNIT: lsunit = getnum(value, &opts[OPT_L], L_SUNIT); lsunitflag = 1; + opts[OPT_L].subopt_params[L_SUNIT].value = + lsunit; break; case L_NAME: case L_DEV: @@ -1733,22 +1812,32 @@ main( xi.logname = logfile; ldflag = 1; loginternal = 0; + opts[OPT_L].subopt_params[L_NAME].value = 1; + opts[OPT_L].subopt_params[L_DEV].value = 1; break; case L_VERSION: sb_feat.log_version = getnum(value, &opts[OPT_L], L_VERSION); lvflag = 1; + opts[OPT_L].subopt_params[L_VERSION].value = + sb_feat.log_version; break; case L_SIZE: logbytes = getnum(value, &opts[OPT_L], L_SIZE); + opts[OPT_L].subopt_params[L_SIZE].value = + logbytes; break; case L_SECTLOG: lsectorlog = getnum(value, &opts[OPT_L], L_SECTLOG); lsectorsize = 1 << lsectorlog; lslflag = 1; + opts[OPT_L].subopt_params[L_SECTSIZE].value = + lsectorsize; + opts[OPT_L].subopt_params[L_SECTLOG].value = + lsectorlog; break; case L_SECTSIZE: lsectorsize = getnum(value, &opts[OPT_L], @@ -1756,11 +1845,17 @@ main( lsectorlog = libxfs_highbit32(lsectorsize); lssflag = 1; + opts[OPT_L].subopt_params[L_SECTSIZE].value = + lsectorsize; + opts[OPT_L].subopt_params[L_SECTLOG].value = + lsectorlog; break; case L_LAZYSBCNTR: sb_feat.lazy_sb_counters = getnum(value, &opts[OPT_L], L_LAZYSBCNTR); + opts[OPT_L].subopt_params[L_LAZYSBCNTR].value = + sb_feat.lazy_sb_counters; break; default: unknown('l', value); @@ -1786,10 +1881,14 @@ main( M_CRC); if (sb_feat.crcs_enabled) sb_feat.dirftype = true; + opts[OPT_M].subopt_params[M_CRC].value = + sb_feat.crcs_enabled; break; case M_FINOBT: sb_feat.finobt = getnum( value, &opts[OPT_M], M_FINOBT); + opts[OPT_M].subopt_params[M_FINOBT].value = + sb_feat.finobt; break; case M_UUID: if (!value || *value == '\0') @@ -1797,6 +1896,7 @@ main( if (platform_uuid_parse(value, &uuid)) illegal(optarg, "m uuid"); break; + opts[OPT_M].subopt_params[M_UUID].value = 1; default: unknown('m', value); } @@ -1815,6 +1915,10 @@ main( N_LOG); dirblocksize = 1 << dirblocklog; nlflag = 1; + opts[OPT_N].subopt_params[N_SIZE].value = + dirblocksize; + opts[OPT_N].subopt_params[N_LOG].value = + dirblocklog; break; case N_SIZE: dirblocksize = getnum(value, &opts[OPT_N], @@ -1822,6 +1926,10 @@ main( dirblocklog = libxfs_highbit32(dirblocksize); nsflag = 1; + opts[OPT_N].subopt_params[N_SIZE].value = + dirblocksize; + opts[OPT_N].subopt_params[N_LOG].value = + dirblocklog; break; case N_VERSION: value = getstr(value, &opts[OPT_N], @@ -1835,10 +1943,14 @@ main( N_VERSION); } nvflag = 1; + opts[OPT_N].subopt_params[N_VERSION].value = + sb_feat.dir_version; break; case N_FTYPE: sb_feat.dirftype = getnum(value, &opts[OPT_N], N_FTYPE); + opts[OPT_N].subopt_params[N_FTYPE].value = + sb_feat.dirftype; break; default: unknown('n', value); @@ -1870,23 +1982,33 @@ main( case R_EXTSIZE: rtextbytes = getnum(value, &opts[OPT_R], R_EXTSIZE); + opts[OPT_R].subopt_params[R_EXTSIZE].value = + rtextbytes; break; case R_FILE: xi.risfile = getnum(value, &opts[OPT_R], R_FILE); + opts[OPT_R].subopt_params[R_FILE].value = + xi.risfile; break; case R_NAME: case R_DEV: xi.rtname = getstr(value, &opts[OPT_R], R_NAME); + opts[OPT_R].subopt_params[R_NAME].value = 1; + opts[OPT_R].subopt_params[R_DEV].value = 1; break; case R_SIZE: rtbytes = getnum(value, &opts[OPT_R], R_SIZE); + opts[OPT_R].subopt_params[R_SIZE].value = + rtbytes; break; case R_NOALIGN: norsflag = getnum(value, &opts[OPT_R], R_NOALIGN); + opts[OPT_R].subopt_params[R_NOALIGN].value = + norsflag; break; default: unknown('r', value); @@ -1912,6 +2034,10 @@ main( sectorsize = 1 << sectorlog; lsectorsize = sectorsize; lslflag = slflag = 1; + opts[OPT_S].subopt_params[S_LOG].value = + sectorsize; + opts[OPT_S].subopt_params[S_SECTLOG].value = + sectorsize; break; case S_SIZE: case S_SECTSIZE: @@ -1925,6 +2051,10 @@ main( libxfs_highbit32(sectorsize); lsectorlog = sectorlog; lssflag = ssflag = 1; + opts[OPT_S].subopt_params[S_SIZE].value = + sectorlog; + opts[OPT_S].subopt_params[S_SECTSIZE].value = + sectorlog; break; default: unknown('s', value); -- 2.5.5 From jtulak@redhat.com Tue Aug 2 10:42:54 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 1805B7CAE for ; Tue, 2 Aug 2016 10:42:54 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id DCDB68F8039 for ; Tue, 2 Aug 2016 08:42:53 -0700 (PDT) X-ASG-Debug-ID: 1470152571-0bf57b369e350260001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id QUPTXJ5bvowKeV8Z (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 08:42:51 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 207E885364 for ; Tue, 2 Aug 2016 15:42:51 +0000 (UTC) Received: from jtulak.brq.redhat.com (jtulak.brq.redhat.com [10.34.26.85]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72FgjCr020921; Tue, 2 Aug 2016 11:42:50 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: Jan Tulak Subject: [PATCH 4/8] mkfs: change conflicts array into a table capable of cross-option addressing Date: Tue, 2 Aug 2016 17:42:15 +0200 X-ASG-Orig-Subj: [PATCH 4/8] mkfs: change conflicts array into a table capable of cross-option addressing Message-Id: <1470152539-18759-5-git-send-email-jtulak@redhat.com> In-Reply-To: <1470152539-18759-1-git-send-email-jtulak@redhat.com> References: <1470152539-18759-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 02 Aug 2016 15:42:51 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470152571 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 17343 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Change subopt_param.conflicts from array of integers into array of structures. This prepares the ground for more universal conflict detection in future patches. Signed-off-by: Jan Tulak --- mkfs/xfs_mkfs.c | 239 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 127 insertions(+), 112 deletions(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 14cf7dd..b2fbc58 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -93,8 +93,16 @@ unsigned int sectorsize; * * conflicts MANDATORY * If your subopt is in a conflict with some other option, specify it. - * Accepts the .index values of the conflicting subopts and the last - * member of this list has to be LAST_CONFLICT. + * Accepts the .index values of the conflicting subopt as .opt (e.g. OPT_D) + * and .subopt (e.g. D_FILE). If .test_values is true, then the conflict + * is raised only when the "remote" suboption .value is equal to + * .invalid_value field and the "current" suboption has .value equal to + * .at_value. + * If .test_values is false, a conflict is raised when the suboption appears + * on the CLI, no matter its value. The field .message contains an optional + * explanatory string for the user. This string can't be translated here, + * so it has to be enveloped with _() when printed. + * The last member of this list has to be {LAST_CONFLICT}. * * minval, maxval OPTIONAL * These options are used for automatic range check and they have to be @@ -133,7 +141,14 @@ struct opt_params { bool str_seen; bool convert; bool is_power_2; - int conflicts[MAX_CONFLICTS]; + struct subopt_conflict { + int opt; + int subopt; + bool test_values; + long long invalid_value; + long long at_value; + const char *message; + } conflicts [MAX_CONFLICTS]; long long minval; long long maxval; long long defaultval; @@ -153,8 +168,8 @@ struct opt_params { }, .subopt_params = { { .index = B_LOG, - .conflicts = { B_SIZE, - LAST_CONFLICT }, + .conflicts = { {OPT_B, B_SIZE, false, 0, 0}, + {LAST_CONFLICT} }, .minval = XFS_MIN_BLOCKSIZE_LOG, .maxval = XFS_MAX_BLOCKSIZE_LOG, .defaultval = SUBOPT_NEEDS_VAL, @@ -162,8 +177,8 @@ struct opt_params { { .index = B_SIZE, .convert = true, .is_power_2 = true, - .conflicts = { B_LOG, - LAST_CONFLICT }, + .conflicts = { {OPT_B, B_LOG, false, 0, 0}, + {LAST_CONFLICT} }, .minval = XFS_MIN_BLOCKSIZE, .maxval = XFS_MAX_BLOCKSIZE, .defaultval = SUBOPT_NEEDS_VAL, @@ -209,84 +224,84 @@ struct opt_params { }, .subopt_params = { { .index = D_AGCOUNT, - .conflicts = { D_AGSIZE, - LAST_CONFLICT }, + .conflicts = { {OPT_D, D_AGSIZE, false, 0, 0}, + {LAST_CONFLICT} }, .minval = 1, .maxval = XFS_MAX_AGNUMBER, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = D_FILE, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, }, { .index = D_NAME, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = D_SIZE, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .convert = true, .minval = XFS_AG_MIN_BYTES, .maxval = LLONG_MAX, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = D_SUNIT, - .conflicts = { D_NOALIGN, - D_SU, - D_SW, - LAST_CONFLICT }, + .conflicts = { {OPT_D, D_NOALIGN, false, 0, 0}, + {OPT_D, D_SU, false, 0, 0}, + {OPT_D, D_SW, false, 0, 0}, + {LAST_CONFLICT} }, .minval = 0, .maxval = UINT_MAX, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = D_SWIDTH, - .conflicts = { D_NOALIGN, - D_SU, - D_SW, - LAST_CONFLICT }, + .conflicts = { {OPT_D, D_NOALIGN, false, 0, 0}, + {OPT_D, D_SU, false, 0, 0}, + {OPT_D, D_SW, false, 0, 0}, + {LAST_CONFLICT} }, .minval = 0, .maxval = UINT_MAX, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = D_AGSIZE, - .conflicts = { D_AGCOUNT, - LAST_CONFLICT }, + .conflicts = { {OPT_D, D_AGCOUNT, false, 0, 0}, + {LAST_CONFLICT} }, .convert = true, .minval = XFS_AG_MIN_BYTES, .maxval = XFS_AG_MAX_BYTES, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = D_SU, - .conflicts = { D_NOALIGN, - D_SUNIT, - D_SWIDTH, - LAST_CONFLICT }, + .conflicts = { {OPT_D, D_NOALIGN, false, 0, 0}, + {OPT_D, D_SUNIT, false, 0, 0}, + {OPT_D, D_SWIDTH, false, 0, 0}, + {LAST_CONFLICT} }, .convert = true, .minval = 0, .maxval = UINT_MAX, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = D_SW, - .conflicts = { D_NOALIGN, - D_SUNIT, - D_SWIDTH, - LAST_CONFLICT }, + .conflicts = { {OPT_D, D_NOALIGN, false, 0, 0}, + {OPT_D, D_SUNIT, false, 0, 0}, + {OPT_D, D_SWIDTH, false, 0, 0}, + {LAST_CONFLICT} }, .minval = 0, .maxval = UINT_MAX, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = D_SECTLOG, - .conflicts = { D_SECTSIZE, - LAST_CONFLICT }, + .conflicts = { {OPT_D, D_SECTSIZE, false, 0, 0}, + {LAST_CONFLICT} }, .minval = XFS_MIN_SECTORSIZE_LOG, .maxval = XFS_MAX_SECTORSIZE_LOG, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = D_SECTSIZE, - .conflicts = { D_SECTLOG, - LAST_CONFLICT }, + .conflicts = { {OPT_D, D_SECTLOG, false, 0, 0}, + {LAST_CONFLICT} }, .convert = true, .is_power_2 = true, .minval = XFS_MIN_SECTORSIZE, @@ -294,29 +309,29 @@ struct opt_params { .defaultval = SUBOPT_NEEDS_VAL, }, { .index = D_NOALIGN, - .conflicts = { D_SU, - D_SW, - D_SUNIT, - D_SWIDTH, - LAST_CONFLICT }, + .conflicts = { {OPT_D, D_SU, false, 0, 0}, + {OPT_D, D_SW, false, 0, 0}, + {OPT_D, D_SUNIT, false, 0, 0}, + {OPT_D, D_SWIDTH, false, 0, 0}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, }, { .index = D_RTINHERIT, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 1, .maxval = 1, .defaultval = 1, }, { .index = D_PROJINHERIT, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 0, .maxval = UINT_MAX, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = D_EXTSZINHERIT, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 0, .maxval = UINT_MAX, .defaultval = SUBOPT_NEEDS_VAL, @@ -348,57 +363,57 @@ struct opt_params { }, .subopt_params = { { .index = I_ALIGN, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, }, { .index = I_LOG, - .conflicts = { I_PERBLOCK, - I_SIZE, - LAST_CONFLICT }, + .conflicts = { {OPT_I, I_PERBLOCK, false, 0, 0}, + {OPT_I, I_SIZE, false, 0, 0}, + {LAST_CONFLICT} }, .minval = XFS_DINODE_MIN_LOG, .maxval = XFS_DINODE_MAX_LOG, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = I_MAXPCT, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 0, .maxval = 100, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = I_PERBLOCK, - .conflicts = { I_LOG, - I_SIZE, - LAST_CONFLICT }, + .conflicts = { {OPT_I, I_LOG, false, 0, 0}, + {OPT_I, I_SIZE, false, 0, 0}, + {LAST_CONFLICT} }, .is_power_2 = true, .minval = XFS_MIN_INODE_PERBLOCK, .maxval = XFS_MAX_BLOCKSIZE / XFS_DINODE_MIN_SIZE, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = I_SIZE, - .conflicts = { I_PERBLOCK, - I_LOG, - LAST_CONFLICT }, + .conflicts = { {OPT_I, I_PERBLOCK, false, 0, 0}, + {OPT_I, I_LOG, false, 0, 0}, + {LAST_CONFLICT} }, .is_power_2 = true, .minval = XFS_DINODE_MIN_SIZE, .maxval = XFS_DINODE_MAX_SIZE, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = I_ATTR, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 0, .maxval = 2, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = I_PROJID32BIT, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, }, { .index = I_SPINODES, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, @@ -438,64 +453,64 @@ struct opt_params { }, .subopt_params = { { .index = L_AGNUM, - .conflicts = { L_DEV, - LAST_CONFLICT }, + .conflicts = { {OPT_L, L_DEV, false, 0, 0}, + {LAST_CONFLICT} }, .minval = 0, .maxval = UINT_MAX, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = L_INTERNAL, - .conflicts = { L_FILE, - L_DEV, - LAST_CONFLICT }, + .conflicts = { {OPT_L, L_FILE, false, 0, 0}, + {OPT_L, L_DEV, false, 0, 0}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, }, { .index = L_SIZE, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .convert = true, .minval = 2 * 1024 * 1024LL, /* XXX: XFS_MIN_LOG_BYTES */ .maxval = XFS_MAX_LOG_BYTES, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = L_VERSION, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 1, .maxval = 2, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = L_SUNIT, - .conflicts = { L_SU, - LAST_CONFLICT }, + .conflicts = { {OPT_L, L_SU, false, 0, 0}, + {LAST_CONFLICT} }, .minval = 1, .maxval = BTOBB(XLOG_MAX_RECORD_BSIZE), .defaultval = SUBOPT_NEEDS_VAL, }, { .index = L_SU, - .conflicts = { L_SUNIT, - LAST_CONFLICT }, + .conflicts = { {OPT_L, L_SUNIT, false, 0, 0}, + {LAST_CONFLICT} }, .convert = true, .minval = BBTOB(1), .maxval = XLOG_MAX_RECORD_BSIZE, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = L_DEV, - .conflicts = { L_AGNUM, - L_INTERNAL, - LAST_CONFLICT }, + .conflicts = { {OPT_L, L_AGNUM, false, 0, 0}, + {OPT_L, L_INTERNAL, false, 0, 0}, + {LAST_CONFLICT} }, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = L_SECTLOG, - .conflicts = { L_SECTSIZE, - LAST_CONFLICT }, + .conflicts = { {OPT_L, L_SECTSIZE, false, 0, 0}, + {LAST_CONFLICT} }, .minval = XFS_MIN_SECTORSIZE_LOG, .maxval = XFS_MAX_SECTORSIZE_LOG, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = L_SECTSIZE, - .conflicts = { L_SECTLOG, - LAST_CONFLICT }, + .conflicts = { {OPT_L, L_SECTLOG, false, 0, 0}, + {LAST_CONFLICT} }, .convert = true, .is_power_2 = true, .minval = XFS_MIN_SECTORSIZE, @@ -503,20 +518,20 @@ struct opt_params { .defaultval = SUBOPT_NEEDS_VAL, }, { .index = L_FILE, - .conflicts = { L_INTERNAL, - LAST_CONFLICT }, + .conflicts = { {OPT_L, L_INTERNAL, false, 0, 0}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, }, { .index = L_NAME, - .conflicts = { L_AGNUM, - L_INTERNAL, - LAST_CONFLICT }, + .conflicts = { {OPT_L, L_AGNUM, false, 0, 0}, + {OPT_L, L_INTERNAL, false, 0, 0}, + {LAST_CONFLICT} }, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = L_LAZYSBCNTR, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, @@ -540,15 +555,15 @@ struct opt_params { }, .subopt_params = { { .index = N_LOG, - .conflicts = { N_SIZE, - LAST_CONFLICT }, + .conflicts = { {OPT_N, N_SIZE, false, 0, 0}, + {LAST_CONFLICT} }, .minval = XFS_MIN_REC_DIRSIZE, .maxval = XFS_MAX_BLOCKSIZE_LOG, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = N_SIZE, - .conflicts = { N_LOG, - LAST_CONFLICT }, + .conflicts = { {OPT_N, N_LOG, false, 0, 0}, + {LAST_CONFLICT} }, .convert = true, .is_power_2 = true, .minval = 1 << XFS_MIN_REC_DIRSIZE, @@ -556,13 +571,13 @@ struct opt_params { .defaultval = SUBOPT_NEEDS_VAL, }, { .index = N_VERSION, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 2, .maxval = 2, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = N_FTYPE, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, @@ -590,38 +605,38 @@ struct opt_params { }, .subopt_params = { { .index = R_EXTSIZE, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .convert = true, .minval = XFS_MIN_RTEXTSIZE, .maxval = XFS_MAX_RTEXTSIZE, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = R_SIZE, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .convert = true, .minval = 0, .maxval = LLONG_MAX, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = R_DEV, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = R_FILE, .minval = 0, .maxval = 1, .defaultval = 1, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, }, { .index = R_NAME, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = R_NOALIGN, .minval = 0, .maxval = 1, .defaultval = 1, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, }, }, }, @@ -642,25 +657,25 @@ struct opt_params { }, .subopt_params = { { .index = S_LOG, - .conflicts = { S_SIZE, - S_SECTSIZE, - LAST_CONFLICT }, + .conflicts = { {OPT_S, S_SIZE, false, 0, 0}, + {OPT_S, S_SECTSIZE, false, 0, 0}, + {LAST_CONFLICT} }, .minval = XFS_MIN_SECTORSIZE_LOG, .maxval = XFS_MAX_SECTORSIZE_LOG, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = S_SECTLOG, - .conflicts = { S_SIZE, - S_SECTSIZE, - LAST_CONFLICT }, + .conflicts = { {OPT_S, S_SIZE, false, 0, 0}, + {OPT_S, S_SECTSIZE, false, 0, 0}, + {LAST_CONFLICT} }, .minval = XFS_MIN_SECTORSIZE_LOG, .maxval = XFS_MAX_SECTORSIZE_LOG, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = S_SIZE, - .conflicts = { S_LOG, - S_SECTLOG, - LAST_CONFLICT }, + .conflicts = { {OPT_S, S_LOG, false, 0, 0}, + {OPT_S, S_SECTLOG, false, 0, 0}, + {LAST_CONFLICT} }, .convert = true, .is_power_2 = true, .minval = XFS_MIN_SECTORSIZE, @@ -668,9 +683,9 @@ struct opt_params { .defaultval = SUBOPT_NEEDS_VAL, }, { .index = S_SECTSIZE, - .conflicts = { S_LOG, - S_SECTLOG, - LAST_CONFLICT }, + .conflicts = { {OPT_S, S_LOG, false, 0, 0}, + {OPT_S, S_SECTLOG, false, 0, 0}, + {LAST_CONFLICT} }, .convert = true, .is_power_2 = true, .minval = XFS_MIN_SECTORSIZE, @@ -694,19 +709,19 @@ struct opt_params { }, .subopt_params = { { .index = M_CRC, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, }, { .index = M_FINOBT, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, }, { .index = M_UUID, - .conflicts = { LAST_CONFLICT }, + .conflicts = { {LAST_CONFLICT} }, .defaultval = SUBOPT_NEEDS_VAL, }, }, @@ -1308,14 +1323,14 @@ check_opt( /* check for conflicts with the option */ for (i = 0; i < MAX_CONFLICTS; i++) { - int conflict_opt = sp->conflicts[i]; + struct subopt_conflict conflict_opt = sp->conflicts[i]; - if (conflict_opt == LAST_CONFLICT) + if (conflict_opt.opt == LAST_CONFLICT) break; - if (opts->subopt_params[conflict_opt].seen || - opts->subopt_params[conflict_opt].str_seen) + if (opts->subopt_params[conflict_opt.subopt].seen || + opts->subopt_params[conflict_opt.subopt].str_seen) conflict(opts->name, (char **)opts->subopts, - conflict_opt, index); + conflict_opt.subopt, index); } } -- 2.5.5 From jtulak@redhat.com Tue Aug 2 10:42:55 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 376107CB4 for ; Tue, 2 Aug 2016 10:42:55 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id ED7AB304039 for ; Tue, 2 Aug 2016 08:42:51 -0700 (PDT) X-ASG-Debug-ID: 1470152568-0bf57b369e350250001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id inTKm0jPduq4HdZ7 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 08:42:48 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1B5963CF for ; Tue, 2 Aug 2016 15:42:48 +0000 (UTC) Received: from jtulak.brq.redhat.com (jtulak.brq.redhat.com [10.34.26.85]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72FgjCo020921; Tue, 2 Aug 2016 11:42:47 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: Jan Tulak Subject: [PATCH 1/8] mkfs: remove intermediate getstr followed by getnum Date: Tue, 2 Aug 2016 17:42:12 +0200 X-ASG-Orig-Subj: [PATCH 1/8] mkfs: remove intermediate getstr followed by getnum Message-Id: <1470152539-18759-2-git-send-email-jtulak@redhat.com> In-Reply-To: <1470152539-18759-1-git-send-email-jtulak@redhat.com> References: <1470152539-18759-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Tue, 02 Aug 2016 15:42:48 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470152568 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 9430 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Some options loaded a number as a stringi with getstr and converted it to number with getnum later in the code, without any reason for this approach. (They were probably forgotten in some past cleaning.) This patch changes them to skip the string and use getnum directly in the main option-parsing loop, as do all the other numerical options. Signed-off-by: Jan Tulak --- mkfs/xfs_mkfs.c | 88 +++++++++++++++++++++++++-------------------------------- 1 file changed, 38 insertions(+), 50 deletions(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 8007dd0..188adb4 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -1395,7 +1395,7 @@ main( char *dfile; int dirblocklog; int dirblocksize; - char *dsize; + __uint64_t dbytes; int dsu; int dsw; int dsunit; @@ -1419,7 +1419,7 @@ main( xfs_rfsblock_t logblocks; char *logfile; int loginternal; - char *logsize; + __uint64_t logbytes; xfs_fsblock_t logstart; int lvflag; int lsflag; @@ -1448,11 +1448,11 @@ main( char *protostring; int qflag; xfs_rfsblock_t rtblocks; + __uint64_t rtbytes; xfs_extlen_t rtextblocks; xfs_rtblock_t rtextents; - char *rtextsize; + __uint64_t rtextbytes; char *rtfile; - char *rtsize; xfs_sb_t *sbp; int sectorlog; __uint64_t sector_mask; @@ -1498,7 +1498,8 @@ main( qflag = 0; imaxpct = inodelog = inopblock = isize = 0; dfile = logfile = rtfile = NULL; - dsize = logsize = rtsize = rtextsize = protofile = NULL; + protofile = NULL; + rtbytes = rtextbytes = logbytes = dbytes = 0; dsu = dsw = dsunit = dswidth = lalign = lsu = lsunit = 0; nodsflag = norsflag = 0; force_overwrite = 0; @@ -1564,7 +1565,7 @@ main( xi.dname = getstr(value, &dopts, D_NAME); break; case D_SIZE: - dsize = getstr(value, &dopts, D_SIZE); + dbytes = getnum(value, &dopts, D_SIZE); break; case D_SUNIT: dsunit = getnum(value, &dopts, D_SUNIT); @@ -1711,7 +1712,7 @@ main( lvflag = 1; break; case L_SIZE: - logsize = getstr(value, &lopts, L_SIZE); + logbytes = getnum(value, &lopts, L_SIZE); break; case L_SECTLOG: lsectorlog = getnum(value, &lopts, @@ -1835,8 +1836,7 @@ main( switch (getsubopt(&p, (constpp)subopts, &value)) { case R_EXTSIZE: - rtextsize = getstr(value, &ropts, - R_EXTSIZE); + rtextbytes = getnum(value, &ropts, R_EXTSIZE); break; case R_FILE: xi.risfile = getnum(value, &ropts, @@ -1848,7 +1848,7 @@ main( R_NAME); break; case R_SIZE: - rtsize = getstr(value, &ropts, R_SIZE); + rtbytes = getnum(value, &ropts, R_SIZE); break; case R_NOALIGN: norsflag = getnum(value, &ropts, @@ -1952,14 +1952,14 @@ _("Minimum block size for CRC enabled filesystems is %d bytes.\n"), * sector size mismatches between the new filesystem and the underlying * host filesystem. */ - check_device_type(dfile, &xi.disfile, !dsize, !dfile, + check_device_type(dfile, &xi.disfile, !dbytes, !dfile, Nflag ? NULL : &xi.dcreat, force_overwrite, "d"); if (!loginternal) - check_device_type(xi.logname, &xi.lisfile, !logsize, !xi.logname, + check_device_type(xi.logname, &xi.lisfile, !logbytes, !xi.logname, Nflag ? NULL : &xi.lcreat, force_overwrite, "l"); if (xi.rtname) - check_device_type(xi.rtname, &xi.risfile, !rtsize, !xi.rtname, + check_device_type(xi.rtname, &xi.risfile, !rtbytes, !xi.rtname, Nflag ? NULL : &xi.rcreat, force_overwrite, "r"); if (xi.disfile || xi.lisfile || xi.risfile) @@ -2119,10 +2119,7 @@ _("sparse inodes not supported without CRC support\n")); } - if (dsize) { - __uint64_t dbytes; - - dbytes = getnum(dsize, &dopts, D_SIZE); + if (dbytes) { if (dbytes % XFS_MIN_BLOCKSIZE) { fprintf(stderr, _("illegal data length %lld, not a multiple of %d\n"), @@ -2151,10 +2148,7 @@ _("sparse inodes not supported without CRC support\n")); usage(); } - if (logsize) { - __uint64_t logbytes; - - logbytes = getnum(logsize, &lopts, L_SIZE); + if (logbytes) { if (logbytes % XFS_MIN_BLOCKSIZE) { fprintf(stderr, _("illegal log length %lld, not a multiple of %d\n"), @@ -2168,10 +2162,7 @@ _("sparse inodes not supported without CRC support\n")); (long long)logbytes, blocksize, (long long)(logblocks << blocklog)); } - if (rtsize) { - __uint64_t rtbytes; - - rtbytes = getnum(rtsize, &ropts, R_SIZE); + if (rtbytes) { if (rtbytes % XFS_MIN_BLOCKSIZE) { fprintf(stderr, _("illegal rt length %lld, not a multiple of %d\n"), @@ -2188,10 +2179,7 @@ _("sparse inodes not supported without CRC support\n")); /* * If specified, check rt extent size against its constraints. */ - if (rtextsize) { - __uint64_t rtextbytes; - - rtextbytes = getnum(rtextsize, &ropts, R_EXTSIZE); + if (rtextbytes) { if (rtextbytes % blocksize) { fprintf(stderr, _("illegal rt extent size %lld, not a multiple of %d\n"), @@ -2208,7 +2196,7 @@ _("sparse inodes not supported without CRC support\n")); __uint64_t rswidth; __uint64_t rtextbytes; - if (!norsflag && !xi.risfile && !(!rtsize && xi.disfile)) + if (!norsflag && !xi.risfile && !(!rtbytes && xi.disfile)) rswidth = ft.rtswidth; else rswidth = 0; @@ -2319,15 +2307,15 @@ _("sparse inodes not supported without CRC support\n")); rtfile = _("volume rt"); else if (!xi.rtdev) rtfile = _("none"); - if (dsize && xi.dsize > 0 && dblocks > DTOBT(xi.dsize)) { + if (dbytes && xi.dsize > 0 && dblocks > DTOBT(xi.dsize)) { fprintf(stderr, - _("size %s specified for data subvolume is too large, " + _("size %lld specified for data subvolume is too large, " "maximum is %lld blocks\n"), - dsize, (long long)DTOBT(xi.dsize)); + (long long)dbytes, (long long)DTOBT(xi.dsize)); usage(); - } else if (!dsize && xi.dsize > 0) + } else if (!dbytes && xi.dsize > 0) dblocks = DTOBT(xi.dsize); - else if (!dsize) { + else if (!dbytes) { fprintf(stderr, _("can't get size of data subvolume\n")); usage(); } @@ -2360,22 +2348,22 @@ reported by the device (%u).\n"), reported by the device (%u).\n"), lsectorsize, xi.lbsize); } - if (rtsize && xi.rtsize > 0 && xi.rtbsize > sectorsize) { + if (rtbytes && xi.rtsize > 0 && xi.rtbsize > sectorsize) { fprintf(stderr, _( "Warning: the realtime subvolume sector size %u is less than the sector size\n\ reported by the device (%u).\n"), sectorsize, xi.rtbsize); } - if (rtsize && xi.rtsize > 0 && rtblocks > DTOBT(xi.rtsize)) { + if (rtbytes && xi.rtsize > 0 && rtblocks > DTOBT(xi.rtsize)) { fprintf(stderr, - _("size %s specified for rt subvolume is too large, " + _("size %lld specified for rt subvolume is too large, " "maximum is %lld blocks\n"), - rtsize, (long long)DTOBT(xi.rtsize)); + (long long)rtbytes, (long long)DTOBT(xi.rtsize)); usage(); - } else if (!rtsize && xi.rtsize > 0) + } else if (!rtbytes && xi.rtsize > 0) rtblocks = DTOBT(xi.rtsize); - else if (rtsize && !xi.rtdev) { + else if (rtbytes && !xi.rtdev) { fprintf(stderr, _("size specified for non-existent rt subvolume\n")); usage(); @@ -2578,26 +2566,26 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), sb_feat.log_version, lsunit, sb_feat.finobt); ASSERT(min_logblocks); min_logblocks = MAX(XFS_MIN_LOG_BLOCKS, min_logblocks); - if (!logsize && dblocks >= (1024*1024*1024) >> blocklog) + if (!logbytes && dblocks >= (1024*1024*1024) >> blocklog) min_logblocks = MAX(min_logblocks, XFS_MIN_LOG_BYTES>>blocklog); - if (logsize && xi.logBBsize > 0 && logblocks > DTOBT(xi.logBBsize)) { + if (logbytes && xi.logBBsize > 0 && logblocks > DTOBT(xi.logBBsize)) { fprintf(stderr, -_("size %s specified for log subvolume is too large, maximum is %lld blocks\n"), - logsize, (long long)DTOBT(xi.logBBsize)); +_("size %lld specified for log subvolume is too large, maximum is %lld blocks\n"), + (long long)logbytes, (long long)DTOBT(xi.logBBsize)); usage(); - } else if (!logsize && xi.logBBsize > 0) { + } else if (!logbytes && xi.logBBsize > 0) { logblocks = DTOBT(xi.logBBsize); - } else if (logsize && !xi.logdev && !loginternal) { + } else if (logbytes && !xi.logdev && !loginternal) { fprintf(stderr, _("size specified for non-existent log subvolume\n")); usage(); - } else if (loginternal && logsize && logblocks >= dblocks) { + } else if (loginternal && logbytes && logblocks >= dblocks) { fprintf(stderr, _("size %lld too large for internal log\n"), (long long)logblocks); usage(); } else if (!loginternal && !xi.logdev) { logblocks = 0; - } else if (loginternal && !logsize) { + } else if (loginternal && !logbytes) { if (dblocks < GIGABYTES(1, blocklog)) { /* tiny filesystems get minimum sized logs. */ @@ -2661,7 +2649,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"), * Readjust the log size to fit within an AG if it was sized * automatically. */ - if (!logsize) { + if (!logbytes) { logblocks = MIN(logblocks, XFS_ALLOC_AG_MAX_USABLE(mp)); -- 2.5.5 From jtulak@redhat.com Tue Aug 2 10:42:56 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 560937CB5 for ; Tue, 2 Aug 2016 10:42:55 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 267248F8037 for ; Tue, 2 Aug 2016 08:42:55 -0700 (PDT) X-ASG-Debug-ID: 1470152573-0bf57b369e350270001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id x2tvPwBHMky37wY5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 08:42:53 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1BFFE83F47 for ; Tue, 2 Aug 2016 15:42:53 +0000 (UTC) Received: from jtulak.brq.redhat.com (jtulak.brq.redhat.com [10.34.26.85]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72FgjCt020921; Tue, 2 Aug 2016 11:42:52 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: Jan Tulak Subject: [PATCH 6/8] mkfs: add cross-section conflict checks Date: Tue, 2 Aug 2016 17:42:17 +0200 X-ASG-Orig-Subj: [PATCH 6/8] mkfs: add cross-section conflict checks Message-Id: <1470152539-18759-7-git-send-email-jtulak@redhat.com> In-Reply-To: <1470152539-18759-1-git-send-email-jtulak@redhat.com> References: <1470152539-18759-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 02 Aug 2016 15:42:53 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470152573 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2902 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Checks are modified to work with cross-section conflicts (data, metada, log, ...). Signed-off-by: Jan Tulak --- mkfs/xfs_mkfs.c | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 6f3f278..2eca989 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -728,6 +728,9 @@ struct opt_params { }, }; +static void conflict_struct(struct opt_params *opt, struct subopt_param *subopt, + struct subopt_conflict *conflict); + #define TERABYTES(count, blog) ((__uint64_t)(count) << (40 - (blog))) #define GIGABYTES(count, blog) ((__uint64_t)(count) << (30 - (blog))) #define MEGABYTES(count, blog) ((__uint64_t)(count) << (20 - (blog))) @@ -1329,10 +1332,9 @@ check_opt( break; if (conflict_opt.test_values) break; - if (opt->subopt_params[conflict_opt.subopt].seen || - opt->subopt_params[conflict_opt.subopt].str_seen) { - conflict(opt->name, (char **)opt->subopts, - conflict_opt.subopt, index); + if (opts[conflict_opt.opt].subopt_params[conflict_opt.subopt].seen || + opts[conflict_opt.opt].subopt_params[conflict_opt.subopt].str_seen) { + conflict_struct(opt, sp, &conflict_opt); } } } @@ -1357,13 +1359,12 @@ check_opt_value( break; if (!conflict_opt.test_values) break; - if ((opt->subopt_params[conflict_opt.subopt].seen || - opt->subopt_params[conflict_opt.subopt].str_seen) && - opt->subopt_params[conflict_opt.subopt].value + if ((opts[conflict_opt.opt].subopt_params[conflict_opt.subopt].seen || + opts[conflict_opt.opt].subopt_params[conflict_opt.subopt].str_seen) && + opts[conflict_opt.opt].subopt_params[conflict_opt.subopt].value == conflict_opt.invalid_value && value == conflict_opt.at_value) { - conflict(opt->name, (char **)opt->subopts, - conflict_opt.subopt, index); + conflict_struct(opt, sp, &conflict_opt); } } } @@ -3430,12 +3431,36 @@ conflict( char *tab[], int oldidx, int newidx) + { fprintf(stderr, _("Cannot specify both -%c %s and -%c %s\n"), opt, tab[oldidx], opt, tab[newidx]); usage(); } +static void +conflict_struct( + struct opt_params *opt, + struct subopt_param *subopt, + struct subopt_conflict *conflict) +{ + if(conflict->message) { + fprintf(stderr, _("Cannot specify both -%c %s and -%c %s: %s\n"), + opt->name, + opt->subopts[subopt->index], + opts[conflict->opt].name, + opts[conflict->opt].subopts[conflict->subopt], + _(conflict->message)); + } else { + fprintf(stderr, _("Cannot specify both -%c %s and -%c %s\n"), + opt->name, + opt->subopts[subopt->index], + opts[conflict->opt].name, + opts[conflict->opt].subopts[conflict->subopt]); + } + usage(); +} + static void illegal( -- 2.5.5 From jtulak@redhat.com Tue Aug 2 10:42:56 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 386947CBD for ; Tue, 2 Aug 2016 10:42:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0B3CB8F8037 for ; Tue, 2 Aug 2016 08:42:56 -0700 (PDT) X-ASG-Debug-ID: 1470152574-0bf57b369c350270001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id gtPE6wITbZFEr2sR (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 08:42:54 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 022B061E40 for ; Tue, 2 Aug 2016 15:42:54 +0000 (UTC) Received: from jtulak.brq.redhat.com (jtulak.brq.redhat.com [10.34.26.85]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72FgjCu020921; Tue, 2 Aug 2016 11:42:53 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: Jan Tulak Subject: [PATCH 7/8] mkfs: Move opts related #define to one place Date: Tue, 2 Aug 2016 17:42:18 +0200 X-ASG-Orig-Subj: [PATCH 7/8] mkfs: Move opts related #define to one place Message-Id: <1470152539-18759-8-git-send-email-jtulak@redhat.com> In-Reply-To: <1470152539-18759-1-git-send-email-jtulak@redhat.com> References: <1470152539-18759-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 02 Aug 2016 15:42:54 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470152574 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 5371 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Takes all the "#define M_CRC x" from struct opt_params declaration and moves them into a single place before the struct. This is because we need to cross-link conflicts and we can't link -l version to -m crc if M_CRC is defined after the conflict section. Signed-off-by: Jan Tulak --- mkfs/xfs_mkfs.c | 134 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 72 insertions(+), 62 deletions(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 2eca989..91c7fee 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -48,6 +48,78 @@ unsigned int sectorsize; #define MAX_CONFLICTS 8 #define LAST_CONFLICT (-1) +#define OPT_B 0 +#define B_LOG 0 +#define B_SIZE 1 + +#define OPT_D 1 +#define D_AGCOUNT 0 +#define D_FILE 1 +#define D_NAME 2 +#define D_SIZE 3 +#define D_SUNIT 4 +#define D_SWIDTH 5 +#define D_AGSIZE 6 +#define D_SU 7 +#define D_SW 8 +#define D_SECTLOG 9 +#define D_SECTSIZE 10 +#define D_NOALIGN 11 +#define D_RTINHERIT 12 +#define D_PROJINHERIT 13 +#define D_EXTSZINHERIT 14 + + +#define OPT_I 2 +#define I_ALIGN 0 +#define I_LOG 1 +#define I_MAXPCT 2 +#define I_PERBLOCK 3 +#define I_SIZE 4 +#define I_ATTR 5 +#define I_PROJID32BIT 6 +#define I_SPINODES 7 + +#define OPT_L 3 +#define L_AGNUM 0 +#define L_INTERNAL 1 +#define L_SIZE 2 +#define L_VERSION 3 +#define L_SUNIT 4 +#define L_SU 5 +#define L_DEV 6 +#define L_SECTLOG 7 +#define L_SECTSIZE 8 +#define L_FILE 9 +#define L_NAME 10 +#define L_LAZYSBCNTR 11 + + +#define OPT_N 4 +#define N_LOG 0 +#define N_SIZE 1 +#define N_VERSION 2 +#define N_FTYPE 3 + +#define OPT_R 5 +#define R_EXTSIZE 0 +#define R_SIZE 1 +#define R_DEV 2 +#define R_FILE 3 +#define R_NAME 4 +#define R_NOALIGN 5 + +#define OPT_S 6 +#define S_LOG 0 +#define S_SECTLOG 1 +#define S_SIZE 2 +#define S_SECTSIZE 3 + +#define OPT_M 7 +#define M_CRC 0 +#define M_FINOBT 1 +#define M_UUID 2 + /* * Table for parsing mkfs parameters. * @@ -155,14 +227,11 @@ struct opt_params { long long value; } subopt_params[MAX_SUBOPTS]; } opts[MAX_OPTS] = { -#define OPT_B 0 { .index = OPT_B, .name = 'b', .subopts = { -#define B_LOG 0 "log", -#define B_SIZE 1 "size", NULL }, @@ -185,40 +254,24 @@ struct opt_params { }, }, }, -#define OPT_D 1 { .index = OPT_D, .name = 'd', .subopts = { - #define D_AGCOUNT 0 "agcount", - #define D_FILE 1 "file", - #define D_NAME 2 "name", - #define D_SIZE 3 "size", - #define D_SUNIT 4 "sunit", - #define D_SWIDTH 5 "swidth", - #define D_AGSIZE 6 "agsize", - #define D_SU 7 "su", - #define D_SW 8 "sw", - #define D_SECTLOG 9 "sectlog", - #define D_SECTSIZE 10 "sectsize", - #define D_NOALIGN 11 "noalign", - #define D_RTINHERIT 12 "rtinherit", - #define D_PROJINHERIT 13 "projinherit", - #define D_EXTSZINHERIT 14 "extszinherit", NULL }, @@ -338,26 +391,17 @@ struct opt_params { }, }, }, -#define OPT_I 2 { .index = OPT_I, .name = 'i', .subopts = { -#define I_ALIGN 0 "align", -#define I_LOG 1 "log", -#define I_MAXPCT 2 "maxpct", -#define I_PERBLOCK 3 "perblock", -#define I_SIZE 4 "size", -#define I_ATTR 5 "attr", -#define I_PROJID32BIT 6 "projid32bit", -#define I_SPINODES 7 "sparse", NULL }, @@ -420,34 +464,21 @@ struct opt_params { }, }, }, -#define OPT_L 3 { .index = OPT_L, .name = 'l', .subopts = { - #define L_AGNUM 0 "agnum", - #define L_INTERNAL 1 "internal", - #define L_SIZE 2 "size", - #define L_VERSION 3 "version", - #define L_SUNIT 4 "sunit", - #define L_SU 5 "su", - #define L_DEV 6 "logdev", - #define L_SECTLOG 7 "sectlog", - #define L_SECTSIZE 8 "sectsize", - #define L_FILE 9 "file", - #define L_NAME 10 "name", - #define L_LAZYSBCNTR 11 "lazy-count", NULL }, @@ -538,18 +569,13 @@ struct opt_params { }, }, }, -#define OPT_N 4 { .index = OPT_N, .name = 'n', .subopts = { - #define N_LOG 0 "log", - #define N_SIZE 1 "size", - #define N_VERSION 2 "version", - #define N_FTYPE 3 "ftype", NULL, }, @@ -584,22 +610,15 @@ struct opt_params { }, }, }, -#define OPT_R 5 { .index = OPT_R, .name = 'r', .subopts = { - #define R_EXTSIZE 0 "extsize", - #define R_SIZE 1 "size", - #define R_DEV 2 "rtdev", - #define R_FILE 3 "file", - #define R_NAME 4 "name", - #define R_NOALIGN 5 "noalign", NULL }, @@ -640,18 +659,13 @@ struct opt_params { }, }, }, -#define OPT_S 6 { .index = OPT_S, .name = 's', .subopts = { - #define S_LOG 0 "log", - #define S_SECTLOG 1 "sectlog", - #define S_SIZE 2 "size", - #define S_SECTSIZE 3 "sectsize", NULL }, @@ -694,16 +708,12 @@ struct opt_params { }, }, }, -#define OPT_M 7 { .index = OPT_M, .name = 'm', .subopts = { - #define M_CRC 0 "crc", - #define M_FINOBT 1 "finobt", - #define M_UUID 2 "uuid", NULL }, -- 2.5.5 From jtulak@redhat.com Tue Aug 2 10:42:54 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 6CA427CA6 for ; Tue, 2 Aug 2016 10:42:54 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3EE6A304032 for ; Tue, 2 Aug 2016 08:42:54 -0700 (PDT) X-ASG-Debug-ID: 1470152569-0bf57b369c350250001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id tGAG7FCZk1BTw1x4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 08:42:49 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3B9B0C05786F for ; Tue, 2 Aug 2016 15:42:49 +0000 (UTC) Received: from jtulak.brq.redhat.com (jtulak.brq.redhat.com [10.34.26.85]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72FgjCp020921; Tue, 2 Aug 2016 11:42:48 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: Jan Tulak Subject: [PATCH 2/8] mkfs: merge tables for opts parsing into one table Date: Tue, 2 Aug 2016 17:42:13 +0200 X-ASG-Orig-Subj: [PATCH 2/8] mkfs: merge tables for opts parsing into one table Message-Id: <1470152539-18759-3-git-send-email-jtulak@redhat.com> In-Reply-To: <1470152539-18759-1-git-send-email-jtulak@redhat.com> References: <1470152539-18759-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 02 Aug 2016 15:42:49 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470152569 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 38517 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Merge separate instances of opt_params into one indexable table. Git makes this patch looks a bit more complicated, but it does not change values or structure of anything else. It only moves all the "struct opt_params dopts = {...}", changes indentation for these substructures and replaces their usage (dopts -> opts[OPT_D]). Signed-off-by: Jan Tulak --- mkfs/xfs_mkfs.c | 1214 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 624 insertions(+), 590 deletions(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 188adb4..4741522 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -42,6 +42,7 @@ static int ispow2(unsigned int i); unsigned int blocksize; unsigned int sectorsize; +#define MAX_OPTS 16 #define MAX_SUBOPTS 16 #define SUBOPT_NEEDS_VAL (-1LL) #define MAX_CONFLICTS 8 @@ -52,6 +53,10 @@ unsigned int sectorsize; * * Description of the structure members follows: * + * index MANDATORY + * An integer denoting the position of the specific option in opts array, + * counting from 0 up to MAX_OPTS. + * * name MANDATORY * Name is a single char, e.g., for '-d file', name is 'd'. * @@ -112,6 +117,7 @@ unsigned int sectorsize; * value in any case. */ struct opt_params { + int index; const char name; const char *subopts[MAX_SUBOPTS]; @@ -126,568 +132,576 @@ struct opt_params { long long maxval; long long defaultval; } subopt_params[MAX_SUBOPTS]; -}; - -struct opt_params bopts = { - .name = 'b', - .subopts = { +} opts[MAX_OPTS] = { +#define OPT_B 0 + { + .index = OPT_B, + .name = 'b', + .subopts = { #define B_LOG 0 - "log", + "log", #define B_SIZE 1 - "size", - NULL - }, - .subopt_params = { - { .index = B_LOG, - .conflicts = { B_SIZE, - LAST_CONFLICT }, - .minval = XFS_MIN_BLOCKSIZE_LOG, - .maxval = XFS_MAX_BLOCKSIZE_LOG, - .defaultval = SUBOPT_NEEDS_VAL, + "size", + NULL }, - { .index = B_SIZE, - .convert = true, - .is_power_2 = true, - .conflicts = { B_LOG, - LAST_CONFLICT }, - .minval = XFS_MIN_BLOCKSIZE, - .maxval = XFS_MAX_BLOCKSIZE, - .defaultval = SUBOPT_NEEDS_VAL, + .subopt_params = { + { .index = B_LOG, + .conflicts = { B_SIZE, + LAST_CONFLICT }, + .minval = XFS_MIN_BLOCKSIZE_LOG, + .maxval = XFS_MAX_BLOCKSIZE_LOG, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = B_SIZE, + .convert = true, + .is_power_2 = true, + .conflicts = { B_LOG, + LAST_CONFLICT }, + .minval = XFS_MIN_BLOCKSIZE, + .maxval = XFS_MAX_BLOCKSIZE, + .defaultval = SUBOPT_NEEDS_VAL, + }, }, }, -}; - -struct opt_params dopts = { - .name = 'd', - .subopts = { -#define D_AGCOUNT 0 - "agcount", -#define D_FILE 1 - "file", -#define D_NAME 2 - "name", -#define D_SIZE 3 - "size", -#define D_SUNIT 4 - "sunit", -#define D_SWIDTH 5 - "swidth", -#define D_AGSIZE 6 - "agsize", -#define D_SU 7 - "su", -#define D_SW 8 - "sw", -#define D_SECTLOG 9 - "sectlog", -#define D_SECTSIZE 10 - "sectsize", -#define D_NOALIGN 11 - "noalign", -#define D_RTINHERIT 12 - "rtinherit", -#define D_PROJINHERIT 13 - "projinherit", -#define D_EXTSZINHERIT 14 - "extszinherit", - NULL - }, - .subopt_params = { - { .index = D_AGCOUNT, - .conflicts = { D_AGSIZE, - LAST_CONFLICT }, - .minval = 1, - .maxval = XFS_MAX_AGNUMBER, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = D_FILE, - .conflicts = { LAST_CONFLICT }, - .minval = 0, - .maxval = 1, - .defaultval = 1, - }, - { .index = D_NAME, - .conflicts = { LAST_CONFLICT }, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = D_SIZE, - .conflicts = { LAST_CONFLICT }, - .convert = true, - .minval = XFS_AG_MIN_BYTES, - .maxval = LLONG_MAX, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = D_SUNIT, - .conflicts = { D_NOALIGN, - D_SU, - D_SW, - LAST_CONFLICT }, - .minval = 0, - .maxval = UINT_MAX, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = D_SWIDTH, - .conflicts = { D_NOALIGN, - D_SU, - D_SW, - LAST_CONFLICT }, - .minval = 0, - .maxval = UINT_MAX, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = D_AGSIZE, - .conflicts = { D_AGCOUNT, - LAST_CONFLICT }, - .convert = true, - .minval = XFS_AG_MIN_BYTES, - .maxval = XFS_AG_MAX_BYTES, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = D_SU, - .conflicts = { D_NOALIGN, - D_SUNIT, - D_SWIDTH, - LAST_CONFLICT }, - .convert = true, - .minval = 0, - .maxval = UINT_MAX, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = D_SW, - .conflicts = { D_NOALIGN, - D_SUNIT, - D_SWIDTH, - LAST_CONFLICT }, - .minval = 0, - .maxval = UINT_MAX, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = D_SECTLOG, - .conflicts = { D_SECTSIZE, - LAST_CONFLICT }, - .minval = XFS_MIN_SECTORSIZE_LOG, - .maxval = XFS_MAX_SECTORSIZE_LOG, - .defaultval = SUBOPT_NEEDS_VAL, +#define OPT_D 1 + { + .index = OPT_D, + .name = 'd', + .subopts = { + #define D_AGCOUNT 0 + "agcount", + #define D_FILE 1 + "file", + #define D_NAME 2 + "name", + #define D_SIZE 3 + "size", + #define D_SUNIT 4 + "sunit", + #define D_SWIDTH 5 + "swidth", + #define D_AGSIZE 6 + "agsize", + #define D_SU 7 + "su", + #define D_SW 8 + "sw", + #define D_SECTLOG 9 + "sectlog", + #define D_SECTSIZE 10 + "sectsize", + #define D_NOALIGN 11 + "noalign", + #define D_RTINHERIT 12 + "rtinherit", + #define D_PROJINHERIT 13 + "projinherit", + #define D_EXTSZINHERIT 14 + "extszinherit", + NULL }, - { .index = D_SECTSIZE, - .conflicts = { D_SECTLOG, - LAST_CONFLICT }, - .convert = true, - .is_power_2 = true, - .minval = XFS_MIN_SECTORSIZE, - .maxval = XFS_MAX_SECTORSIZE, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = D_NOALIGN, - .conflicts = { D_SU, - D_SW, - D_SUNIT, - D_SWIDTH, - LAST_CONFLICT }, - .minval = 0, - .maxval = 1, - .defaultval = 1, - }, - { .index = D_RTINHERIT, - .conflicts = { LAST_CONFLICT }, - .minval = 1, - .maxval = 1, - .defaultval = 1, - }, - { .index = D_PROJINHERIT, - .conflicts = { LAST_CONFLICT }, - .minval = 0, - .maxval = UINT_MAX, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = D_EXTSZINHERIT, - .conflicts = { LAST_CONFLICT }, - .minval = 0, - .maxval = UINT_MAX, - .defaultval = SUBOPT_NEEDS_VAL, + .subopt_params = { + { .index = D_AGCOUNT, + .conflicts = { D_AGSIZE, + LAST_CONFLICT }, + .minval = 1, + .maxval = XFS_MAX_AGNUMBER, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = D_FILE, + .conflicts = { LAST_CONFLICT }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, + { .index = D_NAME, + .conflicts = { LAST_CONFLICT }, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = D_SIZE, + .conflicts = { LAST_CONFLICT }, + .convert = true, + .minval = XFS_AG_MIN_BYTES, + .maxval = LLONG_MAX, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = D_SUNIT, + .conflicts = { D_NOALIGN, + D_SU, + D_SW, + LAST_CONFLICT }, + .minval = 0, + .maxval = UINT_MAX, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = D_SWIDTH, + .conflicts = { D_NOALIGN, + D_SU, + D_SW, + LAST_CONFLICT }, + .minval = 0, + .maxval = UINT_MAX, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = D_AGSIZE, + .conflicts = { D_AGCOUNT, + LAST_CONFLICT }, + .convert = true, + .minval = XFS_AG_MIN_BYTES, + .maxval = XFS_AG_MAX_BYTES, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = D_SU, + .conflicts = { D_NOALIGN, + D_SUNIT, + D_SWIDTH, + LAST_CONFLICT }, + .convert = true, + .minval = 0, + .maxval = UINT_MAX, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = D_SW, + .conflicts = { D_NOALIGN, + D_SUNIT, + D_SWIDTH, + LAST_CONFLICT }, + .minval = 0, + .maxval = UINT_MAX, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = D_SECTLOG, + .conflicts = { D_SECTSIZE, + LAST_CONFLICT }, + .minval = XFS_MIN_SECTORSIZE_LOG, + .maxval = XFS_MAX_SECTORSIZE_LOG, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = D_SECTSIZE, + .conflicts = { D_SECTLOG, + LAST_CONFLICT }, + .convert = true, + .is_power_2 = true, + .minval = XFS_MIN_SECTORSIZE, + .maxval = XFS_MAX_SECTORSIZE, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = D_NOALIGN, + .conflicts = { D_SU, + D_SW, + D_SUNIT, + D_SWIDTH, + LAST_CONFLICT }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, + { .index = D_RTINHERIT, + .conflicts = { LAST_CONFLICT }, + .minval = 1, + .maxval = 1, + .defaultval = 1, + }, + { .index = D_PROJINHERIT, + .conflicts = { LAST_CONFLICT }, + .minval = 0, + .maxval = UINT_MAX, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = D_EXTSZINHERIT, + .conflicts = { LAST_CONFLICT }, + .minval = 0, + .maxval = UINT_MAX, + .defaultval = SUBOPT_NEEDS_VAL, + }, }, }, -}; - - -struct opt_params iopts = { - .name = 'i', - .subopts = { +#define OPT_I 2 + { + .index = OPT_I, + .name = 'i', + .subopts = { #define I_ALIGN 0 - "align", + "align", #define I_LOG 1 - "log", + "log", #define I_MAXPCT 2 - "maxpct", + "maxpct", #define I_PERBLOCK 3 - "perblock", + "perblock", #define I_SIZE 4 - "size", + "size", #define I_ATTR 5 - "attr", + "attr", #define I_PROJID32BIT 6 - "projid32bit", + "projid32bit", #define I_SPINODES 7 - "sparse", - NULL - }, - .subopt_params = { - { .index = I_ALIGN, - .conflicts = { LAST_CONFLICT }, - .minval = 0, - .maxval = 1, - .defaultval = 1, + "sparse", + NULL }, - { .index = I_LOG, - .conflicts = { I_PERBLOCK, - I_SIZE, - LAST_CONFLICT }, - .minval = XFS_DINODE_MIN_LOG, - .maxval = XFS_DINODE_MAX_LOG, - .defaultval = SUBOPT_NEEDS_VAL, + .subopt_params = { + { .index = I_ALIGN, + .conflicts = { LAST_CONFLICT }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, + { .index = I_LOG, + .conflicts = { I_PERBLOCK, + I_SIZE, + LAST_CONFLICT }, + .minval = XFS_DINODE_MIN_LOG, + .maxval = XFS_DINODE_MAX_LOG, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = I_MAXPCT, + .conflicts = { LAST_CONFLICT }, + .minval = 0, + .maxval = 100, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = I_PERBLOCK, + .conflicts = { I_LOG, + I_SIZE, + LAST_CONFLICT }, + .is_power_2 = true, + .minval = XFS_MIN_INODE_PERBLOCK, + .maxval = XFS_MAX_BLOCKSIZE / XFS_DINODE_MIN_SIZE, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = I_SIZE, + .conflicts = { I_PERBLOCK, + I_LOG, + LAST_CONFLICT }, + .is_power_2 = true, + .minval = XFS_DINODE_MIN_SIZE, + .maxval = XFS_DINODE_MAX_SIZE, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = I_ATTR, + .conflicts = { LAST_CONFLICT }, + .minval = 0, + .maxval = 2, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = I_PROJID32BIT, + .conflicts = { LAST_CONFLICT }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, + { .index = I_SPINODES, + .conflicts = { LAST_CONFLICT }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, }, - { .index = I_MAXPCT, - .conflicts = { LAST_CONFLICT }, - .minval = 0, - .maxval = 100, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = I_PERBLOCK, - .conflicts = { I_LOG, - I_SIZE, - LAST_CONFLICT }, - .is_power_2 = true, - .minval = XFS_MIN_INODE_PERBLOCK, - .maxval = XFS_MAX_BLOCKSIZE / XFS_DINODE_MIN_SIZE, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = I_SIZE, - .conflicts = { I_PERBLOCK, - I_LOG, - LAST_CONFLICT }, - .is_power_2 = true, - .minval = XFS_DINODE_MIN_SIZE, - .maxval = XFS_DINODE_MAX_SIZE, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = I_ATTR, - .conflicts = { LAST_CONFLICT }, - .minval = 0, - .maxval = 2, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = I_PROJID32BIT, - .conflicts = { LAST_CONFLICT }, - .minval = 0, - .maxval = 1, - .defaultval = 1, - }, - { .index = I_SPINODES, - .conflicts = { LAST_CONFLICT }, - .minval = 0, - .maxval = 1, - .defaultval = 1, - }, - }, -}; - -struct opt_params lopts = { - .name = 'l', - .subopts = { -#define L_AGNUM 0 - "agnum", -#define L_INTERNAL 1 - "internal", -#define L_SIZE 2 - "size", -#define L_VERSION 3 - "version", -#define L_SUNIT 4 - "sunit", -#define L_SU 5 - "su", -#define L_DEV 6 - "logdev", -#define L_SECTLOG 7 - "sectlog", -#define L_SECTSIZE 8 - "sectsize", -#define L_FILE 9 - "file", -#define L_NAME 10 - "name", -#define L_LAZYSBCNTR 11 - "lazy-count", - NULL }, - .subopt_params = { - { .index = L_AGNUM, - .conflicts = { L_DEV, - LAST_CONFLICT }, - .minval = 0, - .maxval = UINT_MAX, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = L_INTERNAL, - .conflicts = { L_FILE, - L_DEV, - LAST_CONFLICT }, - .minval = 0, - .maxval = 1, - .defaultval = 1, - }, - { .index = L_SIZE, - .conflicts = { LAST_CONFLICT }, - .convert = true, - .minval = 2 * 1024 * 1024LL, /* XXX: XFS_MIN_LOG_BYTES */ - .maxval = XFS_MAX_LOG_BYTES, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = L_VERSION, - .conflicts = { LAST_CONFLICT }, - .minval = 1, - .maxval = 2, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = L_SUNIT, - .conflicts = { L_SU, - LAST_CONFLICT }, - .minval = 1, - .maxval = BTOBB(XLOG_MAX_RECORD_BSIZE), - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = L_SU, - .conflicts = { L_SUNIT, - LAST_CONFLICT }, - .convert = true, - .minval = BBTOB(1), - .maxval = XLOG_MAX_RECORD_BSIZE, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = L_DEV, - .conflicts = { L_AGNUM, - L_INTERNAL, - LAST_CONFLICT }, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = L_SECTLOG, - .conflicts = { L_SECTSIZE, - LAST_CONFLICT }, - .minval = XFS_MIN_SECTORSIZE_LOG, - .maxval = XFS_MAX_SECTORSIZE_LOG, - .defaultval = SUBOPT_NEEDS_VAL, +#define OPT_L 3 + { + .index = OPT_L, + .name = 'l', + .subopts = { + #define L_AGNUM 0 + "agnum", + #define L_INTERNAL 1 + "internal", + #define L_SIZE 2 + "size", + #define L_VERSION 3 + "version", + #define L_SUNIT 4 + "sunit", + #define L_SU 5 + "su", + #define L_DEV 6 + "logdev", + #define L_SECTLOG 7 + "sectlog", + #define L_SECTSIZE 8 + "sectsize", + #define L_FILE 9 + "file", + #define L_NAME 10 + "name", + #define L_LAZYSBCNTR 11 + "lazy-count", + NULL }, - { .index = L_SECTSIZE, - .conflicts = { L_SECTLOG, - LAST_CONFLICT }, - .convert = true, - .is_power_2 = true, - .minval = XFS_MIN_SECTORSIZE, - .maxval = XFS_MAX_SECTORSIZE, - .defaultval = SUBOPT_NEEDS_VAL, + .subopt_params = { + { .index = L_AGNUM, + .conflicts = { L_DEV, + LAST_CONFLICT }, + .minval = 0, + .maxval = UINT_MAX, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = L_INTERNAL, + .conflicts = { L_FILE, + L_DEV, + LAST_CONFLICT }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, + { .index = L_SIZE, + .conflicts = { LAST_CONFLICT }, + .convert = true, + .minval = 2 * 1024 * 1024LL, /* XXX: XFS_MIN_LOG_BYTES */ + .maxval = XFS_MAX_LOG_BYTES, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = L_VERSION, + .conflicts = { LAST_CONFLICT }, + .minval = 1, + .maxval = 2, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = L_SUNIT, + .conflicts = { L_SU, + LAST_CONFLICT }, + .minval = 1, + .maxval = BTOBB(XLOG_MAX_RECORD_BSIZE), + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = L_SU, + .conflicts = { L_SUNIT, + LAST_CONFLICT }, + .convert = true, + .minval = BBTOB(1), + .maxval = XLOG_MAX_RECORD_BSIZE, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = L_DEV, + .conflicts = { L_AGNUM, + L_INTERNAL, + LAST_CONFLICT }, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = L_SECTLOG, + .conflicts = { L_SECTSIZE, + LAST_CONFLICT }, + .minval = XFS_MIN_SECTORSIZE_LOG, + .maxval = XFS_MAX_SECTORSIZE_LOG, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = L_SECTSIZE, + .conflicts = { L_SECTLOG, + LAST_CONFLICT }, + .convert = true, + .is_power_2 = true, + .minval = XFS_MIN_SECTORSIZE, + .maxval = XFS_MAX_SECTORSIZE, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = L_FILE, + .conflicts = { L_INTERNAL, + LAST_CONFLICT }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, + { .index = L_NAME, + .conflicts = { L_AGNUM, + L_INTERNAL, + LAST_CONFLICT }, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = L_LAZYSBCNTR, + .conflicts = { LAST_CONFLICT }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, }, - { .index = L_FILE, - .conflicts = { L_INTERNAL, - LAST_CONFLICT }, - .minval = 0, - .maxval = 1, - .defaultval = 1, - }, - { .index = L_NAME, - .conflicts = { L_AGNUM, - L_INTERNAL, - LAST_CONFLICT }, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = L_LAZYSBCNTR, - .conflicts = { LAST_CONFLICT }, - .minval = 0, - .maxval = 1, - .defaultval = 1, - }, - }, -}; - -struct opt_params nopts = { - .name = 'n', - .subopts = { -#define N_LOG 0 - "log", -#define N_SIZE 1 - "size", -#define N_VERSION 2 - "version", -#define N_FTYPE 3 - "ftype", - NULL, }, - .subopt_params = { - { .index = N_LOG, - .conflicts = { N_SIZE, - LAST_CONFLICT }, - .minval = XFS_MIN_REC_DIRSIZE, - .maxval = XFS_MAX_BLOCKSIZE_LOG, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = N_SIZE, - .conflicts = { N_LOG, - LAST_CONFLICT }, - .convert = true, - .is_power_2 = true, - .minval = 1 << XFS_MIN_REC_DIRSIZE, - .maxval = XFS_MAX_BLOCKSIZE, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = N_VERSION, - .conflicts = { LAST_CONFLICT }, - .minval = 2, - .maxval = 2, - .defaultval = SUBOPT_NEEDS_VAL, +#define OPT_N 4 + { + .index = OPT_N, + .name = 'n', + .subopts = { + #define N_LOG 0 + "log", + #define N_SIZE 1 + "size", + #define N_VERSION 2 + "version", + #define N_FTYPE 3 + "ftype", + NULL, }, - { .index = N_FTYPE, - .conflicts = { LAST_CONFLICT }, - .minval = 0, - .maxval = 1, - .defaultval = 1, + .subopt_params = { + { .index = N_LOG, + .conflicts = { N_SIZE, + LAST_CONFLICT }, + .minval = XFS_MIN_REC_DIRSIZE, + .maxval = XFS_MAX_BLOCKSIZE_LOG, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = N_SIZE, + .conflicts = { N_LOG, + LAST_CONFLICT }, + .convert = true, + .is_power_2 = true, + .minval = 1 << XFS_MIN_REC_DIRSIZE, + .maxval = XFS_MAX_BLOCKSIZE, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = N_VERSION, + .conflicts = { LAST_CONFLICT }, + .minval = 2, + .maxval = 2, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = N_FTYPE, + .conflicts = { LAST_CONFLICT }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, }, }, -}; - -struct opt_params ropts = { - .name = 'r', - .subopts = { -#define R_EXTSIZE 0 - "extsize", -#define R_SIZE 1 - "size", -#define R_DEV 2 - "rtdev", -#define R_FILE 3 - "file", -#define R_NAME 4 - "name", -#define R_NOALIGN 5 - "noalign", - NULL - }, - .subopt_params = { - { .index = R_EXTSIZE, - .conflicts = { LAST_CONFLICT }, - .convert = true, - .minval = XFS_MIN_RTEXTSIZE, - .maxval = XFS_MAX_RTEXTSIZE, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = R_SIZE, - .conflicts = { LAST_CONFLICT }, - .convert = true, - .minval = 0, - .maxval = LLONG_MAX, - .defaultval = SUBOPT_NEEDS_VAL, +#define OPT_R 5 + { + .index = OPT_R, + .name = 'r', + .subopts = { + #define R_EXTSIZE 0 + "extsize", + #define R_SIZE 1 + "size", + #define R_DEV 2 + "rtdev", + #define R_FILE 3 + "file", + #define R_NAME 4 + "name", + #define R_NOALIGN 5 + "noalign", + NULL }, - { .index = R_DEV, - .conflicts = { LAST_CONFLICT }, - .defaultval = SUBOPT_NEEDS_VAL, + .subopt_params = { + { .index = R_EXTSIZE, + .conflicts = { LAST_CONFLICT }, + .convert = true, + .minval = XFS_MIN_RTEXTSIZE, + .maxval = XFS_MAX_RTEXTSIZE, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = R_SIZE, + .conflicts = { LAST_CONFLICT }, + .convert = true, + .minval = 0, + .maxval = LLONG_MAX, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = R_DEV, + .conflicts = { LAST_CONFLICT }, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = R_FILE, + .minval = 0, + .maxval = 1, + .defaultval = 1, + .conflicts = { LAST_CONFLICT }, + }, + { .index = R_NAME, + .conflicts = { LAST_CONFLICT }, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = R_NOALIGN, + .minval = 0, + .maxval = 1, + .defaultval = 1, + .conflicts = { LAST_CONFLICT }, + }, }, - { .index = R_FILE, - .minval = 0, - .maxval = 1, - .defaultval = 1, - .conflicts = { LAST_CONFLICT }, - }, - { .index = R_NAME, - .conflicts = { LAST_CONFLICT }, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = R_NOALIGN, - .minval = 0, - .maxval = 1, - .defaultval = 1, - .conflicts = { LAST_CONFLICT }, - }, - }, -}; - -struct opt_params sopts = { - .name = 's', - .subopts = { -#define S_LOG 0 - "log", -#define S_SECTLOG 1 - "sectlog", -#define S_SIZE 2 - "size", -#define S_SECTSIZE 3 - "sectsize", - NULL }, - .subopt_params = { - { .index = S_LOG, - .conflicts = { S_SIZE, - S_SECTSIZE, - LAST_CONFLICT }, - .minval = XFS_MIN_SECTORSIZE_LOG, - .maxval = XFS_MAX_SECTORSIZE_LOG, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = S_SECTLOG, - .conflicts = { S_SIZE, - S_SECTSIZE, - LAST_CONFLICT }, - .minval = XFS_MIN_SECTORSIZE_LOG, - .maxval = XFS_MAX_SECTORSIZE_LOG, - .defaultval = SUBOPT_NEEDS_VAL, - }, - { .index = S_SIZE, - .conflicts = { S_LOG, - S_SECTLOG, - LAST_CONFLICT }, - .convert = true, - .is_power_2 = true, - .minval = XFS_MIN_SECTORSIZE, - .maxval = XFS_MAX_SECTORSIZE, - .defaultval = SUBOPT_NEEDS_VAL, +#define OPT_S 6 + { + .index = OPT_S, + .name = 's', + .subopts = { + #define S_LOG 0 + "log", + #define S_SECTLOG 1 + "sectlog", + #define S_SIZE 2 + "size", + #define S_SECTSIZE 3 + "sectsize", + NULL }, - { .index = S_SECTSIZE, - .conflicts = { S_LOG, - S_SECTLOG, - LAST_CONFLICT }, - .convert = true, - .is_power_2 = true, - .minval = XFS_MIN_SECTORSIZE, - .maxval = XFS_MAX_SECTORSIZE, - .defaultval = SUBOPT_NEEDS_VAL, + .subopt_params = { + { .index = S_LOG, + .conflicts = { S_SIZE, + S_SECTSIZE, + LAST_CONFLICT }, + .minval = XFS_MIN_SECTORSIZE_LOG, + .maxval = XFS_MAX_SECTORSIZE_LOG, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = S_SECTLOG, + .conflicts = { S_SIZE, + S_SECTSIZE, + LAST_CONFLICT }, + .minval = XFS_MIN_SECTORSIZE_LOG, + .maxval = XFS_MAX_SECTORSIZE_LOG, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = S_SIZE, + .conflicts = { S_LOG, + S_SECTLOG, + LAST_CONFLICT }, + .convert = true, + .is_power_2 = true, + .minval = XFS_MIN_SECTORSIZE, + .maxval = XFS_MAX_SECTORSIZE, + .defaultval = SUBOPT_NEEDS_VAL, + }, + { .index = S_SECTSIZE, + .conflicts = { S_LOG, + S_SECTLOG, + LAST_CONFLICT }, + .convert = true, + .is_power_2 = true, + .minval = XFS_MIN_SECTORSIZE, + .maxval = XFS_MAX_SECTORSIZE, + .defaultval = SUBOPT_NEEDS_VAL, + }, }, }, -}; - -struct opt_params mopts = { - .name = 'm', - .subopts = { -#define M_CRC 0 - "crc", -#define M_FINOBT 1 - "finobt", -#define M_UUID 2 - "uuid", - NULL - }, - .subopt_params = { - { .index = M_CRC, - .conflicts = { LAST_CONFLICT }, - .minval = 0, - .maxval = 1, - .defaultval = 1, - }, - { .index = M_FINOBT, - .conflicts = { LAST_CONFLICT }, - .minval = 0, - .maxval = 1, - .defaultval = 1, +#define OPT_M 7 + { + .index = OPT_M, + .name = 'm', + .subopts = { + #define M_CRC 0 + "crc", + #define M_FINOBT 1 + "finobt", + #define M_UUID 2 + "uuid", + NULL }, - { .index = M_UUID, - .conflicts = { LAST_CONFLICT }, - .defaultval = SUBOPT_NEEDS_VAL, + .subopt_params = { + { .index = M_CRC, + .conflicts = { LAST_CONFLICT }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, + { .index = M_FINOBT, + .conflicts = { LAST_CONFLICT }, + .minval = 0, + .maxval = 1, + .defaultval = 1, + }, + { .index = M_UUID, + .conflicts = { LAST_CONFLICT }, + .defaultval = SUBOPT_NEEDS_VAL, + }, }, }, }; @@ -1519,18 +1533,19 @@ main( case 'b': p = optarg; while (*p != '\0') { - char **subopts = (char **)bopts.subopts; + char **subopts = (char **)opts[OPT_B].subopts; char *value; switch (getsubopt(&p, (constpp)subopts, &value)) { case B_LOG: - blocklog = getnum(value, &bopts, B_LOG); + blocklog = getnum(value, &opts[OPT_B], + B_LOG); blocksize = 1 << blocklog; blflag = 1; break; case B_SIZE: - blocksize = getnum(value, &bopts, + blocksize = getnum(value, &opts[OPT_B], B_SIZE); blocklog = libxfs_highbit32(blocksize); bsflag = 1; @@ -1543,74 +1558,79 @@ main( case 'd': p = optarg; while (*p != '\0') { - char **subopts = (char **)dopts.subopts; + char **subopts = (char **)opts[OPT_D].subopts; char *value; switch (getsubopt(&p, (constpp)subopts, &value)) { case D_AGCOUNT: - agcount = getnum(value, &dopts, + agcount = getnum(value, &opts[OPT_D], D_AGCOUNT); daflag = 1; break; case D_AGSIZE: - agsize = getnum(value, &dopts, D_AGSIZE); + agsize = getnum(value, &opts[OPT_D], + D_AGSIZE); dasize = 1; break; case D_FILE: - xi.disfile = getnum(value, &dopts, + xi.disfile = getnum(value, &opts[OPT_D], D_FILE); break; case D_NAME: - xi.dname = getstr(value, &dopts, D_NAME); + xi.dname = getstr(value, &opts[OPT_D], + D_NAME); break; case D_SIZE: - dbytes = getnum(value, &dopts, D_SIZE); + dbytes = getnum(value, &opts[OPT_D], + D_SIZE); break; case D_SUNIT: - dsunit = getnum(value, &dopts, D_SUNIT); + dsunit = getnum(value, &opts[OPT_D], + D_SUNIT); break; case D_SWIDTH: - dswidth = getnum(value, &dopts, + dswidth = getnum(value, &opts[OPT_D], D_SWIDTH); break; case D_SU: - dsu = getnum(value, &dopts, D_SU); + dsu = getnum(value, &opts[OPT_D], D_SU); break; case D_SW: - dsw = getnum(value, &dopts, D_SW); + dsw = getnum(value, &opts[OPT_D], D_SW); break; case D_NOALIGN: - nodsflag = getnum(value, &dopts, + nodsflag = getnum(value, &opts[OPT_D], D_NOALIGN); break; case D_SECTLOG: - sectorlog = getnum(value, &dopts, + sectorlog = getnum(value, &opts[OPT_D], D_SECTLOG); sectorsize = 1 << sectorlog; slflag = 1; break; case D_SECTSIZE: - sectorsize = getnum(value, &dopts, + sectorsize = getnum(value, &opts[OPT_D], D_SECTSIZE); sectorlog = libxfs_highbit32(sectorsize); ssflag = 1; break; case D_RTINHERIT: - c = getnum(value, &dopts, D_RTINHERIT); + c = getnum(value, &opts[OPT_D], + D_RTINHERIT); if (c) fsx.fsx_xflags |= XFS_DIFLAG_RTINHERIT; break; case D_PROJINHERIT: - fsx.fsx_projid = getnum(value, &dopts, + fsx.fsx_projid = getnum(value, &opts[OPT_D], D_PROJINHERIT); fsx.fsx_xflags |= XFS_DIFLAG_PROJINHERIT; break; case D_EXTSZINHERIT: - fsx.fsx_extsize = getnum(value, &dopts, + fsx.fsx_extsize = getnum(value, &opts[OPT_D], D_EXTSZINHERIT); fsx.fsx_xflags |= XFS_DIFLAG_EXTSZINHERIT; @@ -1623,47 +1643,52 @@ main( case 'i': p = optarg; while (*p != '\0') { - char **subopts = (char **)iopts.subopts; + char **subopts = (char **)opts[OPT_I].subopts; char *value; switch (getsubopt(&p, (constpp)subopts, &value)) { case I_ALIGN: sb_feat.inode_align = getnum(value, - &iopts, I_ALIGN); + &opts[OPT_I], + I_ALIGN); break; case I_LOG: - inodelog = getnum(value, &iopts, I_LOG); + inodelog = getnum(value, &opts[OPT_I], + I_LOG); isize = 1 << inodelog; ilflag = 1; break; case I_MAXPCT: - imaxpct = getnum(value, &iopts, + imaxpct = getnum(value, &opts[OPT_I], I_MAXPCT); imflag = 1; break; case I_PERBLOCK: - inopblock = getnum(value, &iopts, + inopblock = getnum(value, &opts[OPT_I], I_PERBLOCK); ipflag = 1; break; case I_SIZE: - isize = getnum(value, &iopts, I_SIZE); + isize = getnum(value, &opts[OPT_I], + I_SIZE); inodelog = libxfs_highbit32(isize); isflag = 1; break; case I_ATTR: sb_feat.attr_version = - getnum(value, &iopts, I_ATTR); + getnum(value, &opts[OPT_I], + I_ATTR); break; case I_PROJID32BIT: sb_feat.projid16bit = - !getnum(value, &iopts, + !getnum(value, &opts[OPT_I], I_PROJID32BIT); break; case I_SPINODES: sb_feat.spinodes = getnum(value, - &iopts, I_SPINODES); + &opts[OPT_I], + I_SPINODES); break; default: unknown('i', value); @@ -1673,55 +1698,60 @@ main( case 'l': p = optarg; while (*p != '\0') { - char **subopts = (char **)lopts.subopts; + char **subopts = (char **)opts[OPT_L].subopts; char *value; switch (getsubopt(&p, (constpp)subopts, &value)) { case L_AGNUM: - logagno = getnum(value, &lopts, L_AGNUM); + logagno = getnum(value, &opts[OPT_L], + L_AGNUM); laflag = 1; break; case L_FILE: - xi.lisfile = getnum(value, &lopts, + xi.lisfile = getnum(value, &opts[OPT_L], L_FILE); break; case L_INTERNAL: - loginternal = getnum(value, &lopts, + loginternal = getnum(value, &opts[OPT_L], L_INTERNAL); liflag = 1; break; case L_SU: - lsu = getnum(value, &lopts, L_SU); + lsu = getnum(value, &opts[OPT_L], L_SU); lsuflag = 1; break; case L_SUNIT: - lsunit = getnum(value, &lopts, L_SUNIT); + lsunit = getnum(value, &opts[OPT_L], + L_SUNIT); lsunitflag = 1; break; case L_NAME: case L_DEV: - logfile = getstr(value, &lopts, L_NAME); + logfile = getstr(value, &opts[OPT_L], + L_NAME); xi.logname = logfile; ldflag = 1; loginternal = 0; break; case L_VERSION: sb_feat.log_version = - getnum(value, &lopts, L_VERSION); + getnum(value, &opts[OPT_L], + L_VERSION); lvflag = 1; break; case L_SIZE: - logbytes = getnum(value, &lopts, L_SIZE); + logbytes = getnum(value, &opts[OPT_L], + L_SIZE); break; case L_SECTLOG: - lsectorlog = getnum(value, &lopts, + lsectorlog = getnum(value, &opts[OPT_L], L_SECTLOG); lsectorsize = 1 << lsectorlog; lslflag = 1; break; case L_SECTSIZE: - lsectorsize = getnum(value, &lopts, + lsectorsize = getnum(value, &opts[OPT_L], L_SECTSIZE); lsectorlog = libxfs_highbit32(lsectorsize); @@ -1729,7 +1759,7 @@ main( break; case L_LAZYSBCNTR: sb_feat.lazy_sb_counters = - getnum(value, &lopts, + getnum(value, &opts[OPT_L], L_LAZYSBCNTR); break; default: @@ -1745,20 +1775,21 @@ main( case 'm': p = optarg; while (*p != '\0') { - char **subopts = (char **)mopts.subopts; + char **subopts = (char **)opts[OPT_M].subopts; char *value; switch (getsubopt(&p, (constpp)subopts, &value)) { case M_CRC: sb_feat.crcs_enabled = - getnum(value, &mopts, M_CRC); + getnum(value, &opts[OPT_M], + M_CRC); if (sb_feat.crcs_enabled) sb_feat.dirftype = true; break; case M_FINOBT: sb_feat.finobt = getnum( - value, &mopts, M_FINOBT); + value, &opts[OPT_M], M_FINOBT); break; case M_UUID: if (!value || *value == '\0') @@ -1774,38 +1805,39 @@ main( case 'n': p = optarg; while (*p != '\0') { - char **subopts = (char **)nopts.subopts; + char **subopts = (char **)opts[OPT_N].subopts; char *value; switch (getsubopt(&p, (constpp)subopts, &value)) { case N_LOG: - dirblocklog = getnum(value, &nopts, + dirblocklog = getnum(value, &opts[OPT_N], N_LOG); dirblocksize = 1 << dirblocklog; nlflag = 1; break; case N_SIZE: - dirblocksize = getnum(value, &nopts, + dirblocksize = getnum(value, &opts[OPT_N], N_SIZE); dirblocklog = libxfs_highbit32(dirblocksize); nsflag = 1; break; case N_VERSION: - value = getstr(value, &nopts, N_VERSION); + value = getstr(value, &opts[OPT_N], + N_VERSION); if (!strcasecmp(value, "ci")) { /* ASCII CI mode */ sb_feat.nci = true; } else { sb_feat.dir_version = - getnum(value, &nopts, + getnum(value, &opts[OPT_N], N_VERSION); } nvflag = 1; break; case N_FTYPE: - sb_feat.dirftype = getnum(value, &nopts, + sb_feat.dirftype = getnum(value, &opts[OPT_N], N_FTYPE); break; default: @@ -1830,28 +1862,30 @@ main( case 'r': p = optarg; while (*p != '\0') { - char **subopts = (char **)ropts.subopts; + char **subopts = (char **)opts[OPT_R].subopts; char *value; switch (getsubopt(&p, (constpp)subopts, &value)) { case R_EXTSIZE: - rtextbytes = getnum(value, &ropts, R_EXTSIZE); + rtextbytes = getnum(value, &opts[OPT_R], + R_EXTSIZE); break; case R_FILE: - xi.risfile = getnum(value, &ropts, + xi.risfile = getnum(value, &opts[OPT_R], R_FILE); break; case R_NAME: case R_DEV: - xi.rtname = getstr(value, &ropts, + xi.rtname = getstr(value, &opts[OPT_R], R_NAME); break; case R_SIZE: - rtbytes = getnum(value, &ropts, R_SIZE); + rtbytes = getnum(value, &opts[OPT_R], + R_SIZE); break; case R_NOALIGN: - norsflag = getnum(value, &ropts, + norsflag = getnum(value, &opts[OPT_R], R_NOALIGN); break; default: @@ -1862,7 +1896,7 @@ main( case 's': p = optarg; while (*p != '\0') { - char **subopts = (char **)sopts.subopts; + char **subopts = (char **)opts[OPT_S].subopts; char *value; switch (getsubopt(&p, (constpp)subopts, @@ -1872,7 +1906,7 @@ main( if (lssflag) conflict('s', subopts, S_SECTSIZE, S_SECTLOG); - sectorlog = getnum(value, &sopts, + sectorlog = getnum(value, &opts[OPT_S], S_SECTLOG); lsectorlog = sectorlog; sectorsize = 1 << sectorlog; @@ -1884,7 +1918,7 @@ main( if (lslflag) conflict('s', subopts, S_SECTLOG, S_SECTSIZE); - sectorsize = getnum(value, &sopts, + sectorsize = getnum(value, &opts[OPT_S], S_SECTSIZE); lsectorsize = sectorsize; sectorlog = @@ -1908,7 +1942,7 @@ main( fprintf(stderr, _("extra arguments\n")); usage(); } else if (argc - optind == 1) { - dfile = xi.volname = getstr(argv[optind], &dopts, D_NAME); + dfile = xi.volname = getstr(argv[optind], &opts[OPT_D], D_NAME); } else dfile = xi.dname; @@ -2087,7 +2121,7 @@ _("32 bit Project IDs always enabled on CRC enabled filesytems\n")); * then issue an error. * The same is also for sparse inodes. */ - if (sb_feat.finobt && mopts.subopt_params[M_FINOBT].seen) { + if (sb_feat.finobt && opts[OPT_M].subopt_params[M_FINOBT].seen) { fprintf(stderr, _("finobt not supported without CRC support\n")); usage(); -- 2.5.5 From jtulak@redhat.com Tue Aug 2 10:42:58 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 02E8B7CA6 for ; Tue, 2 Aug 2016 10:42:58 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5BFDDAC004 for ; Tue, 2 Aug 2016 08:42:57 -0700 (PDT) X-ASG-Debug-ID: 1470152575-0bf57b369c350280001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 6AOk64XWMOBcgCdt (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 08:42:55 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F066485541 for ; Tue, 2 Aug 2016 15:42:54 +0000 (UTC) Received: from jtulak.brq.redhat.com (jtulak.brq.redhat.com [10.34.26.85]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72FgjCv020921; Tue, 2 Aug 2016 11:42:54 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: Jan Tulak Subject: [PATCH 8/8] mkfs: move conflicts into the table Date: Tue, 2 Aug 2016 17:42:19 +0200 X-ASG-Orig-Subj: [PATCH 8/8] mkfs: move conflicts into the table Message-Id: <1470152539-18759-9-git-send-email-jtulak@redhat.com> In-Reply-To: <1470152539-18759-1-git-send-email-jtulak@redhat.com> References: <1470152539-18759-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 02 Aug 2016 15:42:54 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470152575 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 6845 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Fill the table with conflicts data and remove now-duplicate code for their detection from other parts of mkfs. Signed-off-by: Jan Tulak --- mkfs/xfs_mkfs.c | 109 ++++++++++++++++++++++++++------------------------------ 1 file changed, 50 insertions(+), 59 deletions(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 91c7fee..44fa65a 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -45,7 +45,7 @@ unsigned int sectorsize; #define MAX_OPTS 16 #define MAX_SUBOPTS 16 #define SUBOPT_NEEDS_VAL (-1LL) -#define MAX_CONFLICTS 8 +#define MAX_CONFLICTS 32 #define LAST_CONFLICT (-1) #define OPT_B 0 @@ -407,7 +407,9 @@ struct opt_params { }, .subopt_params = { { .index = I_ALIGN, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_CRC, true, 1, 0, + "Inodes always aligned for CRC enabled filesytems."}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, @@ -445,19 +447,26 @@ struct opt_params { .defaultval = SUBOPT_NEEDS_VAL, }, { .index = I_ATTR, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_CRC, true, 1, 1, + "V2 attribute format always enabled on CRC enabled filesytems."}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 2, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = I_PROJID32BIT, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_CRC, true, 1, 0, + "32 bit Project IDs always enabled on CRC enabled filesytems."}, + {LAST_CONFLICT} }, + .minval = 0, .maxval = 1, .defaultval = 1, }, { .index = I_SPINODES, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_CRC, true, 0, 1, + "Sparse inodes not supported without CRC support."}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, @@ -506,7 +515,9 @@ struct opt_params { .defaultval = SUBOPT_NEEDS_VAL, }, { .index = L_VERSION, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_CRC, true, 1, 1, + "V2 logs are required for CRC enabled filesystems."}, + {LAST_CONFLICT} }, .minval = 1, .maxval = 2, .defaultval = SUBOPT_NEEDS_VAL, @@ -562,7 +573,9 @@ struct opt_params { .defaultval = SUBOPT_NEEDS_VAL, }, { .index = L_LAZYSBCNTR, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_CRC, true, 1, 0, + "Lazy superblock counted always enabled for CRC enabled filesytems."}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, @@ -603,7 +616,9 @@ struct opt_params { .defaultval = SUBOPT_NEEDS_VAL, }, { .index = N_FTYPE, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_CRC, true, 1, 0, + "Cannot disable ftype with crcs enabled."}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, @@ -719,13 +734,31 @@ struct opt_params { }, .subopt_params = { { .index = M_CRC, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_L, L_VERSION, true, 1, 1, + "V2 logs are required for CRC enabled filesystems."}, + {OPT_I, I_ALIGN, true, 0, 1, + "Inodes always aligned for CRC enabled filesytems."}, + {OPT_I, I_PROJID32BIT, true, 0, 1, + "32 bit Project IDs always enabled on CRC enabled filesytems."}, + {OPT_I, I_ATTR, true, 1, 1, + "V2 attribute format always enabled on CRC enabled filesytems."}, + {OPT_L, L_LAZYSBCNTR, true, 0, 1, + "Lazy superblock counted always enabled for CRC enabled filesytems."}, + {OPT_M, M_FINOBT, true, 1, 0, + "Finobt not supported without CRC support."}, + {OPT_I, I_SPINODES, true, 1, 0, + "Sparse inodes not supported without CRC support."}, + {OPT_N, N_FTYPE, true, 0, 1, + "Cannot disable ftype with crcs enabled."}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, }, { .index = M_FINOBT, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_CRC, true, 0, 1, + "Finobt not supported without CRC support."}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, @@ -2157,11 +2190,16 @@ _("Minimum block size for CRC enabled filesystems is %d bytes.\n"), XFS_MIN_CRC_BLOCKSIZE); usage(); } + + /* + * If user explicitly stated -m crc=1 -n ftype=0, an error was already + * issued. But if -n ftype=0 was stated alone, then it is a conflict + * with a default value for crc enabled and has to be detected here. + */ if (sb_feat.crcs_enabled && !sb_feat.dirftype) { fprintf(stderr, _("cannot disable ftype with crcs enabled\n")); usage(); } - if (!slflag && !ssflag) { sectorlog = XFS_MIN_SECTORSIZE_LOG; sectorsize = XFS_MIN_SECTORSIZE; @@ -2267,42 +2305,6 @@ _("Minimum inode size for CRCs is %d bytes\n"), 1 << XFS_DINODE_DFL_CRC_LOG); usage(); } - - /* inodes always aligned */ - if (!sb_feat.inode_align) { - fprintf(stderr, -_("Inodes always aligned for CRC enabled filesytems\n")); - usage(); - } - - /* lazy sb counters always on */ - if (!sb_feat.lazy_sb_counters) { - fprintf(stderr, -_("Lazy superblock counted always enabled for CRC enabled filesytems\n")); - usage(); - } - - /* version 2 logs always on */ - if (sb_feat.log_version != 2) { - fprintf(stderr, -_("V2 logs always enabled for CRC enabled filesytems\n")); - usage(); - } - - /* attr2 always on */ - if (sb_feat.attr_version != 2) { - fprintf(stderr, -_("V2 attribute format always enabled on CRC enabled filesytems\n")); - usage(); - } - - /* 32 bit project quota always on */ - /* attr2 always on */ - if (sb_feat.projid16bit) { - fprintf(stderr, -_("32 bit Project IDs always enabled on CRC enabled filesytems\n")); - usage(); - } } else { /* * The kernel doesn't currently support crc=0,finobt=1 @@ -2310,21 +2312,10 @@ _("32 bit Project IDs always enabled on CRC enabled filesytems\n")); * explicitly turned finobt on, then silently turn it off to * avoid an unnecessary warning. * If the user explicitly tried to use crc=0,finobt=1, - * then issue an error. + * the error was already issued during args parsing. * The same is also for sparse inodes. */ - if (sb_feat.finobt && opts[OPT_M].subopt_params[M_FINOBT].seen) { - fprintf(stderr, -_("finobt not supported without CRC support\n")); - usage(); - } sb_feat.finobt = 0; - - if (sb_feat.spinodes) { - fprintf(stderr, -_("sparse inodes not supported without CRC support\n")); - usage(); - } sb_feat.spinodes = 0; } -- 2.5.5 From sandeen@sandeen.net Tue Aug 2 10:54:58 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 F41D37CAE for ; Tue, 2 Aug 2016 10:54:57 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 93C1C304048 for ; Tue, 2 Aug 2016 08:54:57 -0700 (PDT) X-ASG-Debug-ID: 1470153294-0bf8157e6a3c7300001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id vGCLAY388AcnCOt3 for ; Tue, 02 Aug 2016 08:54:54 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Effective-Source-IP: sandeen.net[63.231.237.45] X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from [10.0.0.4] (liberator [10.0.0.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 3225A4AC120 for ; Tue, 2 Aug 2016 10:54:54 -0500 (CDT) Subject: Re: [PATCH] xfs_quota: fall back silently if XFS_GETNEXTQUOTA fails To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfs_quota: fall back silently if XFS_GETNEXTQUOTA fails References: <1470120540-15135-1-git-send-email-zlang@redhat.com> <20160802122721.GE31492@infradead.org> <20160802131427.GD16413@zlang.usersys.redhat.com> From: Eric Sandeen Message-ID: <564b87af-e3b2-5abf-4000-5f068191fc80@sandeen.net> Date: Tue, 2 Aug 2016 10:54:53 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <20160802131427.GD16413@zlang.usersys.redhat.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: 1470153294 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2268 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31694 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 8/2/16 8:14 AM, Zorro Lang wrote: > On Tue, Aug 02, 2016 at 05:27:21AM -0700, Christoph Hellwig wrote: >> On Tue, Aug 02, 2016 at 02:49:00PM +0800, Zorro Lang wrote: >>> After XFS_GETNEXTQUOTA feature has been merged into linux kernel and >>> xfsprogs, xfs_quota use Q_XGETNEXTQUOTA for report and dump, and >>> fall back to old XFS_GETQUOTA ioctl if XFS_GETNEXTQUOTA fails. >>> >>> But when XFS_GETNEXTQUOTA fails, xfs_quota print a warning as >>> "XFS_GETQUOTA: Invalid argument". That's due to kernel can't >>> recognize XFS_GETNEXTQUOTA ioctl and return EINVAL. At this time, >>> the warning is helpless, xfs_quota just need to fall back. >> >> We'd still want to report other errors, right? > > Yes. This patch will make xfs_quota's report and dump command report > nothing if XFS_GETNEXTQUOTA fails and falls back to XFS_GETQUOTA. > > But if XFS_GETQUOTA fails, it'll report errors. > > As I mentioned in email, we don't report errors if XFS_GETNEXTQUOTA > fails, or we don't report errors if kernel has no XFS_GETNEXTQUOTA > feature? The first one won't report any errors from XFS_GETNEXTQUOTA call, > include kernel has no this feature. > > So: > "cmd == XFS_GETQUOTA" or "!(cmd == XFS_GETNEXTQUOTA && errno == EINVAL)" Oh, I see, this is what I was trying to do before coffee in my earlier reply, and failed. :) > I think they all make sense. Do you have any suggestions? Ignoring EINVAL only for XFS_GETNEXTQUOTA seems like a reasonable idea - we might print two warnings for other errors, though - that might be a little odd, but not terrible. I think the patch as it stands is ok; unexpected errors will be caught and printed on the fallback, and we don't need extra complexity around printing two different command names that way. But if there's preference for printing failure information for both calls, that's fine with me, as long as we filter out EINVAL for GETNEXTQUOTA. -Eric > Thanks, > Zorro > >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From bfoster@redhat.com Tue Aug 2 12:30:23 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 88A7D7CA4 for ; Tue, 2 Aug 2016 12:30:23 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0C16BAC003 for ; Tue, 2 Aug 2016 10:30:22 -0700 (PDT) X-ASG-Debug-ID: 1470159021-0bf8157e6c3cc0b0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 2vCJRo8REmLfiFPN (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 10:30:21 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 370C7C05678E; Tue, 2 Aug 2016 17:30:21 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72HUKQZ022793; Tue, 2 Aug 2016 13:30:20 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 0B361120BDC; Tue, 2 Aug 2016 13:30:19 -0400 (EDT) Date: Tue, 2 Aug 2016 13:30:19 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 14/47] xfs: enable the xfs_defer mechanism to process extents to free Message-ID: <20160802173019.GB54148@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 14/47] xfs: enable the xfs_defer mechanism to process extents to free References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907705713.25461.10249893969831969843.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907705713.25461.10249893969831969843.stgit@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 02 Aug 2016 17:30:21 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470159021 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 5851 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 20, 2016 at 09:57:37PM -0700, Darrick J. Wong wrote: > Connect the xfs_defer mechanism with the pieces that we'll need to > handle deferred extent freeing. We'll wire up the existing code to > our new deferred mechanism later. > > v2: Move the deferred item code into xfs_trans_extfree.c. (kernel) > > Signed-off-by: Darrick J. Wong > --- Reviewed-by: Brian Foster > fs/xfs/libxfs/xfs_defer.h | 1 > fs/xfs/xfs_super.c | 2 + > fs/xfs/xfs_trans.h | 2 + > fs/xfs/xfs_trans_extfree.c | 110 ++++++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 115 insertions(+) > > > diff --git a/fs/xfs/libxfs/xfs_defer.h b/fs/xfs/libxfs/xfs_defer.h > index a227bd2..b9b5a92 100644 > --- a/fs/xfs/libxfs/xfs_defer.h > +++ b/fs/xfs/libxfs/xfs_defer.h > @@ -51,6 +51,7 @@ struct xfs_defer_pending { > * find all the space it needs. > */ > enum xfs_defer_ops_type { > + XFS_DEFER_OPS_TYPE_FREE, > XFS_DEFER_OPS_TYPE_MAX, > }; > > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index 258b594..ce50474 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -1858,6 +1858,8 @@ init_xfs_fs(void) > printk(KERN_INFO XFS_VERSION_STRING " with " > XFS_BUILD_OPTIONS " enabled\n"); > > + xfs_extent_free_init_defer_op(); > + > xfs_dir_startup(); > > error = xfs_init_zones(); > diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h > index 5226511..005fbec 100644 > --- a/fs/xfs/xfs_trans.h > +++ b/fs/xfs/xfs_trans.h > @@ -209,6 +209,8 @@ void xfs_trans_ichgtime(struct xfs_trans *, struct xfs_inode *, int); > void xfs_trans_ijoin(struct xfs_trans *, struct xfs_inode *, uint); > void xfs_trans_log_buf(xfs_trans_t *, struct xfs_buf *, uint, uint); > void xfs_trans_log_inode(xfs_trans_t *, struct xfs_inode *, uint); > + > +void xfs_extent_free_init_defer_op(void); > struct xfs_efi_log_item *xfs_trans_get_efi(struct xfs_trans *, uint); > void xfs_trans_log_efi_extent(struct xfs_trans *, > struct xfs_efi_log_item *, > diff --git a/fs/xfs/xfs_trans_extfree.c b/fs/xfs/xfs_trans_extfree.c > index 380cc46..a9f34ee 100644 > --- a/fs/xfs/xfs_trans_extfree.c > +++ b/fs/xfs/xfs_trans_extfree.c > @@ -22,10 +22,12 @@ > #include "xfs_log_format.h" > #include "xfs_trans_resv.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_trans.h" > #include "xfs_trans_priv.h" > #include "xfs_extfree_item.h" > #include "xfs_alloc.h" > +#include "xfs_bmap.h" > > /* > * This routine is called to allocate an "extent free intention" > @@ -145,3 +147,111 @@ xfs_trans_free_extent( > > return error; > } > + > +/* Sort bmap items by AG. */ > +static int > +xfs_extent_free_diff_items( > + void *priv, > + struct list_head *a, > + struct list_head *b) > +{ > + struct xfs_mount *mp = priv; > + struct xfs_bmap_free_item *ra; > + struct xfs_bmap_free_item *rb; > + > + ra = container_of(a, struct xfs_bmap_free_item, xbfi_list); > + rb = container_of(b, struct xfs_bmap_free_item, xbfi_list); > + return XFS_FSB_TO_AGNO(mp, ra->xbfi_startblock) - > + XFS_FSB_TO_AGNO(mp, rb->xbfi_startblock); > +} > + > +/* Get an EFI. */ > +STATIC void * > +xfs_extent_free_create_intent( > + struct xfs_trans *tp, > + unsigned int count) > +{ > + return xfs_trans_get_efi(tp, count); > +} > + > +/* Log a free extent to the intent item. */ > +STATIC void > +xfs_extent_free_log_item( > + struct xfs_trans *tp, > + void *intent, > + struct list_head *item) > +{ > + struct xfs_bmap_free_item *free; > + > + free = container_of(item, struct xfs_bmap_free_item, xbfi_list); > + xfs_trans_log_efi_extent(tp, intent, free->xbfi_startblock, > + free->xbfi_blockcount); > +} > + > +/* Get an EFD so we can process all the free extents. */ > +STATIC void * > +xfs_extent_free_create_done( > + struct xfs_trans *tp, > + void *intent, > + unsigned int count) > +{ > + return xfs_trans_get_efd(tp, intent, count); > +} > + > +/* Process a free extent. */ > +STATIC int > +xfs_extent_free_finish_item( > + struct xfs_trans *tp, > + struct xfs_defer_ops *dop, > + struct list_head *item, > + void *done_item, > + void **state) > +{ > + struct xfs_bmap_free_item *free; > + int error; > + > + free = container_of(item, struct xfs_bmap_free_item, xbfi_list); > + error = xfs_trans_free_extent(tp, done_item, > + free->xbfi_startblock, > + free->xbfi_blockcount); > + kmem_free(free); > + return error; > +} > + > +/* Abort all pending EFIs. */ > +STATIC void > +xfs_extent_free_abort_intent( > + void *intent) > +{ > + xfs_efi_release(intent); > +} > + > +/* Cancel a free extent. */ > +STATIC void > +xfs_extent_free_cancel_item( > + struct list_head *item) > +{ > + struct xfs_bmap_free_item *free; > + > + free = container_of(item, struct xfs_bmap_free_item, xbfi_list); > + kmem_free(free); > +} > + > +static const struct xfs_defer_op_type xfs_extent_free_defer_type = { > + .type = XFS_DEFER_OPS_TYPE_FREE, > + .max_items = XFS_EFI_MAX_FAST_EXTENTS, > + .diff_items = xfs_extent_free_diff_items, > + .create_intent = xfs_extent_free_create_intent, > + .abort_intent = xfs_extent_free_abort_intent, > + .log_item = xfs_extent_free_log_item, > + .create_done = xfs_extent_free_create_done, > + .finish_item = xfs_extent_free_finish_item, > + .cancel_item = xfs_extent_free_cancel_item, > +}; > + > +/* Register the deferred op type. */ > +void > +xfs_extent_free_init_defer_op(void) > +{ > + xfs_defer_init_op_type(&xfs_extent_free_defer_type); > +} > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Aug 2 12:30:25 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 56A417CB1 for ; Tue, 2 Aug 2016 12:30:25 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 295B38F8037 for ; Tue, 2 Aug 2016 10:30:22 -0700 (PDT) X-ASG-Debug-ID: 1470159016-0bf57c13692f4700001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id MQs44ovCKlKirLfV (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 10:30:16 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BD07C8122D; Tue, 2 Aug 2016 17:30:15 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72HUFIx024832; Tue, 2 Aug 2016 13:30:15 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 706F0120BDC; Tue, 2 Aug 2016 13:30:14 -0400 (EDT) Date: Tue, 2 Aug 2016 13:30:14 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 11/47] xfs: move deferred operations into a separate file Message-ID: <20160802173013.GA54148@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 11/47] xfs: move deferred operations into a separate file References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907703710.25461.16650495404061662831.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907703710.25461.16650495404061662831.stgit@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 02 Aug 2016 17:30:15 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470159016 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 22183 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 20, 2016 at 09:57:17PM -0700, Darrick J. Wong wrote: > All the code around struct xfs_bmap_free basically implements a > deferred operation framework through which we can roll transactions > (to unlock buffers and avoid violating lock order rules) while > managing all the necessary log redo items. Previously we only used > this code to free extents after some sort of mapping operation, but > with the advent of rmap and reflink, we suddenly need to do more than > that. > > With that in mind, xfs_bmap_free really becomes a deferred ops control > structure. Rename the structure and move the deferred ops into their > own file to avoid further bloating of the bmap code. > > v2: actually sort the work items by AG to avoid deadlocks. > > v3: split out the -EAGAIN continuation handling into a separate patch. > > Signed-off-by: Darrick J. Wong > --- Fixes up my comments from the previous version and punts off the EAGAIN stuff. hch's comments aside, this looks Ok to me: Reviewed-by: Brian Foster > fs/xfs/Makefile | 1 > fs/xfs/libxfs/xfs_defer.c | 444 +++++++++++++++++++++++++++++++++++++++++++++ > fs/xfs/libxfs/xfs_defer.h | 95 ++++++++++ > 3 files changed, 540 insertions(+) > create mode 100644 fs/xfs/libxfs/xfs_defer.c > create mode 100644 fs/xfs/libxfs/xfs_defer.h > > > diff --git a/fs/xfs/Makefile b/fs/xfs/Makefile > index 3542d94..01857b0 100644 > --- a/fs/xfs/Makefile > +++ b/fs/xfs/Makefile > @@ -39,6 +39,7 @@ xfs-y += $(addprefix libxfs/, \ > xfs_btree.o \ > xfs_da_btree.o \ > xfs_da_format.o \ > + xfs_defer.o \ > xfs_dir2.o \ > xfs_dir2_block.o \ > xfs_dir2_data.o \ > diff --git a/fs/xfs/libxfs/xfs_defer.c b/fs/xfs/libxfs/xfs_defer.c > new file mode 100644 > index 0000000..2809db7 > --- /dev/null > +++ b/fs/xfs/libxfs/xfs_defer.c > @@ -0,0 +1,444 @@ > +/* > + * Copyright (C) 2016 Oracle. All Rights Reserved. > + * > + * Author: Darrick J. Wong > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License > + * as published by the Free Software Foundation; either version 2 > + * of the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it would be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write the Free Software Foundation, > + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. > + */ > +#include "xfs.h" > +#include "xfs_fs.h" > +#include "xfs_shared.h" > +#include "xfs_format.h" > +#include "xfs_log_format.h" > +#include "xfs_trans_resv.h" > +#include "xfs_bit.h" > +#include "xfs_sb.h" > +#include "xfs_mount.h" > +#include "xfs_defer.h" > +#include "xfs_trans.h" > +#include "xfs_trace.h" > + > +/* > + * Deferred Operations in XFS > + * > + * Due to the way locking rules work in XFS, certain transactions (block > + * mapping and unmapping, typically) have permanent reservations so that > + * we can roll the transaction to adhere to AG locking order rules and > + * to unlock buffers between metadata updates. Prior to rmap/reflink, > + * the mapping code had a mechanism to perform these deferrals for > + * extents that were going to be freed; this code makes that facility > + * more generic. > + * > + * When adding the reverse mapping and reflink features, it became > + * necessary to perform complex remapping multi-transactions to comply > + * with AG locking order rules, and to be able to spread a single > + * refcount update operation (an operation on an n-block extent can > + * update as many as n records!) among multiple transactions. XFS can > + * roll a transaction to facilitate this, but using this facility > + * requires us to log "intent" items in case log recovery needs to > + * redo the operation, and to log "done" items to indicate that redo > + * is not necessary. > + * > + * Deferred work is tracked in xfs_defer_pending items. Each pending > + * item tracks one type of deferred work. Incoming work items (which > + * have not yet had an intent logged) are attached to a pending item > + * on the dop_intake list, where they wait for the caller to finish > + * the deferred operations. > + * > + * Finishing a set of deferred operations is an involved process. To > + * start, we define "rolling a deferred-op transaction" as follows: > + * > + * > For each xfs_defer_pending item on the dop_intake list, > + * - Sort the work items in AG order. XFS locking > + * order rules require us to lock buffers in AG order. > + * - Create a log intent item for that type. > + * - Attach it to the pending item. > + * - Move the pending item from the dop_intake list to the > + * dop_pending list. > + * > Roll the transaction. > + * > + * NOTE: To avoid exceeding the transaction reservation, we limit the > + * number of items that we attach to a given xfs_defer_pending. > + * > + * The actual finishing process looks like this: > + * > + * > For each xfs_defer_pending in the dop_pending list, > + * - Roll the deferred-op transaction as above. > + * - Create a log done item for that type, and attach it to the > + * log intent item. > + * - For each work item attached to the log intent item, > + * * Perform the described action. > + * * Attach the work item to the log done item. > + * > + * The key here is that we must log an intent item for all pending > + * work items every time we roll the transaction, and that we must log > + * a done item as soon as the work is completed. With this mechanism > + * we can perform complex remapping operations, chaining intent items > + * as needed. > + * > + * This is an example of remapping the extent (E, E+B) into file X at > + * offset A and dealing with the extent (C, C+B) already being mapped > + * there: > + * +-------------------------------------------------+ > + * | Unmap file X startblock C offset A length B | t0 > + * | Intent to reduce refcount for extent (C, B) | > + * | Intent to remove rmap (X, C, A, B) | > + * | Intent to free extent (D, 1) (bmbt block) | > + * | Intent to map (X, A, B) at startblock E | > + * +-------------------------------------------------+ > + * | Map file X startblock E offset A length B | t1 > + * | Done mapping (X, E, A, B) | > + * | Intent to increase refcount for extent (E, B) | > + * | Intent to add rmap (X, E, A, B) | > + * +-------------------------------------------------+ > + * | Reduce refcount for extent (C, B) | t2 > + * | Done reducing refcount for extent (C, B) | > + * | Increase refcount for extent (E, B) | > + * | Done increasing refcount for extent (E, B) | > + * | Intent to free extent (C, B) | > + * | Intent to free extent (F, 1) (refcountbt block) | > + * | Intent to remove rmap (F, 1, REFC) | > + * +-------------------------------------------------+ > + * | Remove rmap (X, C, A, B) | t3 > + * | Done removing rmap (X, C, A, B) | > + * | Add rmap (X, E, A, B) | > + * | Done adding rmap (X, E, A, B) | > + * | Remove rmap (F, 1, REFC) | > + * | Done removing rmap (F, 1, REFC) | > + * +-------------------------------------------------+ > + * | Free extent (C, B) | t4 > + * | Done freeing extent (C, B) | > + * | Free extent (D, 1) | > + * | Done freeing extent (D, 1) | > + * | Free extent (F, 1) | > + * | Done freeing extent (F, 1) | > + * +-------------------------------------------------+ > + * > + * If we should crash before t2 commits, log recovery replays > + * the following intent items: > + * > + * - Intent to reduce refcount for extent (C, B) > + * - Intent to remove rmap (X, C, A, B) > + * - Intent to free extent (D, 1) (bmbt block) > + * - Intent to increase refcount for extent (E, B) > + * - Intent to add rmap (X, E, A, B) > + * > + * In the process of recovering, it should also generate and take care > + * of these intent items: > + * > + * - Intent to free extent (C, B) > + * - Intent to free extent (F, 1) (refcountbt block) > + * - Intent to remove rmap (F, 1, REFC) > + */ > + > +static const struct xfs_defer_op_type *defer_op_types[XFS_DEFER_OPS_TYPE_MAX]; > + > +/* > + * For each pending item in the intake list, log its intent item and the > + * associated extents, then add the entire intake list to the end of > + * the pending list. > + */ > +STATIC void > +xfs_defer_intake_work( > + struct xfs_trans *tp, > + struct xfs_defer_ops *dop) > +{ > + struct list_head *li; > + struct xfs_defer_pending *dfp; > + > + list_for_each_entry(dfp, &dop->dop_intake, dfp_list) { > + dfp->dfp_intent = dfp->dfp_type->create_intent(tp, > + dfp->dfp_count); > + list_sort(tp->t_mountp, &dfp->dfp_work, > + dfp->dfp_type->diff_items); > + list_for_each(li, &dfp->dfp_work) > + dfp->dfp_type->log_item(tp, dfp->dfp_intent, li); > + } > + > + list_splice_tail_init(&dop->dop_intake, &dop->dop_pending); > +} > + > +/* Abort all the intents that were committed. */ > +STATIC void > +xfs_defer_trans_abort( > + struct xfs_trans *tp, > + struct xfs_defer_ops *dop, > + int error) > +{ > + struct xfs_defer_pending *dfp; > + > + /* > + * If the transaction was committed, drop the intent reference > + * since we're bailing out of here. The other reference is > + * dropped when the intent hits the AIL. If the transaction > + * was not committed, the intent is freed by the intent item > + * unlock handler on abort. > + */ > + if (!dop->dop_committed) > + return; > + > + /* Abort intent items. */ > + list_for_each_entry(dfp, &dop->dop_pending, dfp_list) { > + if (dfp->dfp_committed) > + dfp->dfp_type->abort_intent(dfp->dfp_intent); > + } > + > + /* Shut down FS. */ > + xfs_force_shutdown(tp->t_mountp, (error == -EFSCORRUPTED) ? > + SHUTDOWN_CORRUPT_INCORE : SHUTDOWN_META_IO_ERROR); > +} > + > +/* Roll a transaction so we can do some deferred op processing. */ > +STATIC int > +xfs_defer_trans_roll( > + struct xfs_trans **tp, > + struct xfs_defer_ops *dop, > + struct xfs_inode *ip) > +{ > + int i; > + int error; > + > + /* Log all the joined inodes except the one we passed in. */ > + for (i = 0; i < XFS_DEFER_OPS_NR_INODES && dop->dop_inodes[i]; i++) { > + if (dop->dop_inodes[i] == ip) > + continue; > + xfs_trans_log_inode(*tp, dop->dop_inodes[i], XFS_ILOG_CORE); > + } > + > + /* Roll the transaction. */ > + error = xfs_trans_roll(tp, ip); > + if (error) { > + xfs_defer_trans_abort(*tp, dop, error); > + return error; > + } > + dop->dop_committed = true; > + > + /* Rejoin the joined inodes except the one we passed in. */ > + for (i = 0; i < XFS_DEFER_OPS_NR_INODES && dop->dop_inodes[i]; i++) { > + if (dop->dop_inodes[i] == ip) > + continue; > + xfs_trans_ijoin(*tp, dop->dop_inodes[i], 0); > + } > + > + return error; > +} > + > +/* Do we have any work items to finish? */ > +bool > +xfs_defer_has_unfinished_work( > + struct xfs_defer_ops *dop) > +{ > + return !list_empty(&dop->dop_pending) || !list_empty(&dop->dop_intake); > +} > + > +/* > + * Add this inode to the deferred op. Each joined inode is relogged > + * each time we roll the transaction, in addition to any inode passed > + * to xfs_defer_finish(). > + */ > +int > +xfs_defer_join( > + struct xfs_defer_ops *dop, > + struct xfs_inode *ip) > +{ > + int i; > + > + for (i = 0; i < XFS_DEFER_OPS_NR_INODES; i++) { > + if (dop->dop_inodes[i] == ip) > + return 0; > + else if (dop->dop_inodes[i] == NULL) { > + dop->dop_inodes[i] = ip; > + return 0; > + } > + } > + > + return -EFSCORRUPTED; > +} > + > +/* > + * Finish all the pending work. This involves logging intent items for > + * any work items that wandered in since the last transaction roll (if > + * one has even happened), rolling the transaction, and finishing the > + * work items in the first item on the logged-and-pending list. > + * > + * If an inode is provided, relog it to the new transaction. > + */ > +int > +xfs_defer_finish( > + struct xfs_trans **tp, > + struct xfs_defer_ops *dop, > + struct xfs_inode *ip) > +{ > + struct xfs_defer_pending *dfp; > + struct list_head *li; > + struct list_head *n; > + void *done_item = NULL; > + void *state; > + int error = 0; > + void (*cleanup_fn)(struct xfs_trans *, void *, int); > + > + ASSERT((*tp)->t_flags & XFS_TRANS_PERM_LOG_RES); > + > + /* Until we run out of pending work to finish... */ > + while (xfs_defer_has_unfinished_work(dop)) { > + /* Log intents for work items sitting in the intake. */ > + xfs_defer_intake_work(*tp, dop); > + > + /* Roll the transaction. */ > + error = xfs_defer_trans_roll(tp, dop, ip); > + if (error) > + goto out; > + > + /* Mark all pending intents as committed. */ > + list_for_each_entry_reverse(dfp, &dop->dop_pending, dfp_list) { > + if (dfp->dfp_committed) > + break; > + dfp->dfp_committed = true; > + } > + > + /* Log an intent-done item for the first pending item. */ > + dfp = list_first_entry(&dop->dop_pending, > + struct xfs_defer_pending, dfp_list); > + done_item = dfp->dfp_type->create_done(*tp, dfp->dfp_intent, > + dfp->dfp_count); > + cleanup_fn = dfp->dfp_type->finish_cleanup; > + > + /* Finish the work items. */ > + state = NULL; > + list_for_each_safe(li, n, &dfp->dfp_work) { > + list_del(li); > + dfp->dfp_count--; > + error = dfp->dfp_type->finish_item(*tp, dop, li, > + done_item, &state); > + if (error) { > + /* > + * Clean up after ourselves and jump out. > + * xfs_defer_cancel will take care of freeing > + * all these lists and stuff. > + */ > + if (cleanup_fn) > + cleanup_fn(*tp, state, error); > + xfs_defer_trans_abort(*tp, dop, error); > + goto out; > + } > + } > + /* Done with the dfp, free it. */ > + list_del(&dfp->dfp_list); > + kmem_free(dfp); > + > + if (cleanup_fn) > + cleanup_fn(*tp, state, error); > + } > + > +out: > + return error; > +} > + > +/* > + * Free up any items left in the list. > + */ > +void > +xfs_defer_cancel( > + struct xfs_defer_ops *dop) > +{ > + struct xfs_defer_pending *dfp; > + struct xfs_defer_pending *pli; > + struct list_head *pwi; > + struct list_head *n; > + > + /* > + * Free the pending items. Caller should already have arranged > + * for the intent items to be released. > + */ > + list_for_each_entry_safe(dfp, pli, &dop->dop_intake, dfp_list) { > + list_del(&dfp->dfp_list); > + list_for_each_safe(pwi, n, &dfp->dfp_work) { > + list_del(pwi); > + dfp->dfp_count--; > + dfp->dfp_type->cancel_item(pwi); > + } > + ASSERT(dfp->dfp_count == 0); > + kmem_free(dfp); > + } > + list_for_each_entry_safe(dfp, pli, &dop->dop_pending, dfp_list) { > + list_del(&dfp->dfp_list); > + list_for_each_safe(pwi, n, &dfp->dfp_work) { > + list_del(pwi); > + dfp->dfp_count--; > + dfp->dfp_type->cancel_item(pwi); > + } > + ASSERT(dfp->dfp_count == 0); > + kmem_free(dfp); > + } > +} > + > +/* Add an item for later deferred processing. */ > +void > +xfs_defer_add( > + struct xfs_defer_ops *dop, > + enum xfs_defer_ops_type type, > + struct list_head *li) > +{ > + struct xfs_defer_pending *dfp = NULL; > + > + /* > + * Add the item to a pending item at the end of the intake list. > + * If the last pending item has the same type, reuse it. Else, > + * create a new pending item at the end of the intake list. > + */ > + if (!list_empty(&dop->dop_intake)) { > + dfp = list_last_entry(&dop->dop_intake, > + struct xfs_defer_pending, dfp_list); > + if (dfp->dfp_type->type != type || > + (dfp->dfp_type->max_items && > + dfp->dfp_count >= dfp->dfp_type->max_items)) > + dfp = NULL; > + } > + if (!dfp) { > + dfp = kmem_alloc(sizeof(struct xfs_defer_pending), > + KM_SLEEP | KM_NOFS); > + dfp->dfp_type = defer_op_types[type]; > + dfp->dfp_committed = false; > + dfp->dfp_intent = NULL; > + dfp->dfp_count = 0; > + INIT_LIST_HEAD(&dfp->dfp_work); > + list_add_tail(&dfp->dfp_list, &dop->dop_intake); > + } > + > + list_add_tail(li, &dfp->dfp_work); > + dfp->dfp_count++; > +} > + > +/* Initialize a deferred operation list. */ > +void > +xfs_defer_init_op_type( > + const struct xfs_defer_op_type *type) > +{ > + defer_op_types[type->type] = type; > +} > + > +/* Initialize a deferred operation. */ > +void > +xfs_defer_init( > + struct xfs_defer_ops *dop, > + xfs_fsblock_t *fbp) > +{ > + dop->dop_committed = false; > + dop->dop_low = false; > + memset(&dop->dop_inodes, 0, sizeof(dop->dop_inodes)); > + *fbp = NULLFSBLOCK; > + INIT_LIST_HEAD(&dop->dop_intake); > + INIT_LIST_HEAD(&dop->dop_pending); > +} > diff --git a/fs/xfs/libxfs/xfs_defer.h b/fs/xfs/libxfs/xfs_defer.h > new file mode 100644 > index 0000000..a227bd2 > --- /dev/null > +++ b/fs/xfs/libxfs/xfs_defer.h > @@ -0,0 +1,95 @@ > +/* > + * Copyright (C) 2016 Oracle. All Rights Reserved. > + * > + * Author: Darrick J. Wong > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License > + * as published by the Free Software Foundation; either version 2 > + * of the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it would be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write the Free Software Foundation, > + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. > + */ > +#ifndef __XFS_DEFER_H__ > +#define __XFS_DEFER_H__ > + > +struct xfs_defer_op_type; > + > +/* > + * Save a log intent item and a list of extents, so that we can replay > + * whatever action had to happen to the extent list and file the log done > + * item. > + */ > +struct xfs_defer_pending { > + const struct xfs_defer_op_type *dfp_type; /* function pointers */ > + struct list_head dfp_list; /* pending items */ > + bool dfp_committed; /* committed trans? */ > + void *dfp_intent; /* log intent item */ > + struct list_head dfp_work; /* work items */ > + unsigned int dfp_count; /* # extent items */ > +}; > + > +/* > + * Header for deferred operation list. > + * > + * dop_low is used by the allocator to activate the lowspace algorithm - > + * when free space is running low the extent allocator may choose to > + * allocate an extent from an AG without leaving sufficient space for > + * a btree split when inserting the new extent. In this case the allocator > + * will enable the lowspace algorithm which is supposed to allow further > + * allocations (such as btree splits and newroots) to allocate from > + * sequential AGs. In order to avoid locking AGs out of order the lowspace > + * algorithm will start searching for free space from AG 0. If the correct > + * transaction reservations have been made then this algorithm will eventually > + * find all the space it needs. > + */ > +enum xfs_defer_ops_type { > + XFS_DEFER_OPS_TYPE_MAX, > +}; > + > +#define XFS_DEFER_OPS_NR_INODES 2 /* join up to two inodes */ > + > +struct xfs_defer_ops { > + bool dop_committed; /* did any trans commit? */ > + bool dop_low; /* alloc in low mode */ > + struct list_head dop_intake; /* unlogged pending work */ > + struct list_head dop_pending; /* logged pending work */ > + > + /* relog these inodes with each roll */ > + struct xfs_inode *dop_inodes[XFS_DEFER_OPS_NR_INODES]; > +}; > + > +void xfs_defer_add(struct xfs_defer_ops *dop, enum xfs_defer_ops_type type, > + struct list_head *h); > +int xfs_defer_finish(struct xfs_trans **tp, struct xfs_defer_ops *dop, > + struct xfs_inode *ip); > +void xfs_defer_cancel(struct xfs_defer_ops *dop); > +void xfs_defer_init(struct xfs_defer_ops *dop, xfs_fsblock_t *fbp); > +bool xfs_defer_has_unfinished_work(struct xfs_defer_ops *dop); > +int xfs_defer_join(struct xfs_defer_ops *dop, struct xfs_inode *ip); > + > +/* Description of a deferred type. */ > +struct xfs_defer_op_type { > + enum xfs_defer_ops_type type; > + unsigned int max_items; > + void (*abort_intent)(void *); > + void *(*create_done)(struct xfs_trans *, void *, unsigned int); > + int (*finish_item)(struct xfs_trans *, struct xfs_defer_ops *, > + struct list_head *, void *, void **); > + void (*finish_cleanup)(struct xfs_trans *, void *, int); > + void (*cancel_item)(struct list_head *); > + int (*diff_items)(void *, struct list_head *, struct list_head *); > + void *(*create_intent)(struct xfs_trans *, uint); > + void (*log_item)(struct xfs_trans *, void *, struct list_head *); > +}; > + > +void xfs_defer_init_op_type(const struct xfs_defer_op_type *type); > + > +#endif /* __XFS_DEFER_H__ */ > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Aug 2 12:30:30 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 461F07CBA for ; Tue, 2 Aug 2016 12:30:30 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id E0EB28F8037 for ; Tue, 2 Aug 2016 10:30:29 -0700 (PDT) X-ASG-Debug-ID: 1470159027-0bf8157e6b3cc0b0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id jQWRN8dVnPmX4tuC (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 10:30:27 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 56D713DEEC; Tue, 2 Aug 2016 17:30:27 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72HUQtN025011; Tue, 2 Aug 2016 13:30:26 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 11A45120BDC; Tue, 2 Aug 2016 13:30:26 -0400 (EDT) Date: Tue, 2 Aug 2016 13:30:26 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 15/47] xfs: rework xfs_bmap_free callers to use xfs_defer_ops Message-ID: <20160802173025.GC54148@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 15/47] xfs: rework xfs_bmap_free callers to use xfs_defer_ops References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907706357.25461.14102482091596438964.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907706357.25461.14102482091596438964.stgit@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Tue, 02 Aug 2016 17:30:27 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470159027 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 22225 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 20, 2016 at 09:57:43PM -0700, Darrick J. Wong wrote: > Restructure everything that used xfs_bmap_free to use xfs_defer_ops > instead. For now we'll just remove the old symbols and play some > cpp magic to make it work; in the next patch we'll actually rename > everything. > > Signed-off-by: Darrick J. Wong > --- Reviewed-by: Brian Foster > fs/xfs/libxfs/xfs_alloc.c | 1 > fs/xfs/libxfs/xfs_attr.c | 1 > fs/xfs/libxfs/xfs_attr_remote.c | 1 > fs/xfs/libxfs/xfs_bmap.c | 55 +++++------------------ > fs/xfs/libxfs/xfs_bmap.h | 32 -------------- > fs/xfs/libxfs/xfs_bmap_btree.c | 5 +- > fs/xfs/libxfs/xfs_btree.c | 1 > fs/xfs/libxfs/xfs_defer.h | 7 +++ > fs/xfs/libxfs/xfs_dir2.c | 1 > fs/xfs/libxfs/xfs_ialloc.c | 1 > fs/xfs/libxfs/xfs_inode_buf.c | 1 > fs/xfs/libxfs/xfs_sb.c | 1 > fs/xfs/xfs_bmap_util.c | 92 +-------------------------------------- > fs/xfs/xfs_bmap_util.h | 2 - > fs/xfs/xfs_dquot.c | 1 > fs/xfs/xfs_filestream.c | 3 + > fs/xfs/xfs_fsops.c | 1 > fs/xfs/xfs_inode.c | 1 > fs/xfs/xfs_iomap.c | 1 > fs/xfs/xfs_log_recover.c | 1 > fs/xfs/xfs_mount.c | 1 > fs/xfs/xfs_rtalloc.c | 1 > fs/xfs/xfs_symlink.c | 1 > fs/xfs/xfs_trace.c | 1 > 24 files changed, 42 insertions(+), 171 deletions(-) > > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c > index 88c26b8..5993f87 100644 > --- a/fs/xfs/libxfs/xfs_alloc.c > +++ b/fs/xfs/libxfs/xfs_alloc.c > @@ -24,6 +24,7 @@ > #include "xfs_bit.h" > #include "xfs_sb.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_btree.h" > #include "xfs_alloc_btree.h" > diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c > index 4e126f4..79d3a30 100644 > --- a/fs/xfs/libxfs/xfs_attr.c > +++ b/fs/xfs/libxfs/xfs_attr.c > @@ -23,6 +23,7 @@ > #include "xfs_trans_resv.h" > #include "xfs_bit.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_da_format.h" > #include "xfs_da_btree.h" > #include "xfs_attr_sf.h" > diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c > index a572532..93a9ce1 100644 > --- a/fs/xfs/libxfs/xfs_attr_remote.c > +++ b/fs/xfs/libxfs/xfs_attr_remote.c > @@ -24,6 +24,7 @@ > #include "xfs_trans_resv.h" > #include "xfs_bit.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_da_format.h" > #include "xfs_da_btree.h" > #include "xfs_inode.h" > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > index c5981f4..e090d34 100644 > --- a/fs/xfs/libxfs/xfs_bmap.c > +++ b/fs/xfs/libxfs/xfs_bmap.c > @@ -24,6 +24,7 @@ > #include "xfs_bit.h" > #include "xfs_sb.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_da_format.h" > #include "xfs_da_btree.h" > #include "xfs_dir2.h" > @@ -595,41 +596,7 @@ xfs_bmap_add_free( > new = kmem_zone_alloc(xfs_bmap_free_item_zone, KM_SLEEP); > new->xbfi_startblock = bno; > new->xbfi_blockcount = (xfs_extlen_t)len; > - list_add(&new->xbfi_list, &flist->xbf_flist); > - flist->xbf_count++; > -} > - > -/* > - * Remove the entry "free" from the free item list. Prev points to the > - * previous entry, unless "free" is the head of the list. > - */ > -void > -xfs_bmap_del_free( > - struct xfs_bmap_free *flist, /* free item list header */ > - struct xfs_bmap_free_item *free) /* list item to be freed */ > -{ > - list_del(&free->xbfi_list); > - flist->xbf_count--; > - kmem_zone_free(xfs_bmap_free_item_zone, free); > -} > - > -/* > - * Free up any items left in the list. > - */ > -void > -xfs_bmap_cancel( > - struct xfs_bmap_free *flist) /* list of bmap_free_items */ > -{ > - struct xfs_bmap_free_item *free; /* free list item */ > - > - if (flist->xbf_count == 0) > - return; > - while (!list_empty(&flist->xbf_flist)) { > - free = list_first_entry(&flist->xbf_flist, > - struct xfs_bmap_free_item, xbfi_list); > - xfs_bmap_del_free(flist, free); > - } > - ASSERT(flist->xbf_count == 0); > + xfs_defer_add(flist, XFS_DEFER_OPS_TYPE_FREE, &new->xbfi_list); > } > > /* > @@ -767,7 +734,7 @@ xfs_bmap_extents_to_btree( > if (*firstblock == NULLFSBLOCK) { > args.type = XFS_ALLOCTYPE_START_BNO; > args.fsbno = XFS_INO_TO_FSB(mp, ip->i_ino); > - } else if (flist->xbf_low) { > + } else if (flist->dop_low) { > args.type = XFS_ALLOCTYPE_START_BNO; > args.fsbno = *firstblock; > } else { > @@ -788,7 +755,7 @@ xfs_bmap_extents_to_btree( > ASSERT(args.fsbno != NULLFSBLOCK); > ASSERT(*firstblock == NULLFSBLOCK || > args.agno == XFS_FSB_TO_AGNO(mp, *firstblock) || > - (flist->xbf_low && > + (flist->dop_low && > args.agno > XFS_FSB_TO_AGNO(mp, *firstblock))); > *firstblock = cur->bc_private.b.firstblock = args.fsbno; > cur->bc_private.b.allocated++; > @@ -3708,7 +3675,7 @@ xfs_bmap_btalloc( > error = xfs_bmap_btalloc_nullfb(ap, &args, &blen); > if (error) > return error; > - } else if (ap->flist->xbf_low) { > + } else if (ap->flist->dop_low) { > if (xfs_inode_is_filestream(ap->ip)) > args.type = XFS_ALLOCTYPE_FIRST_AG; > else > @@ -3741,7 +3708,7 @@ xfs_bmap_btalloc( > * is >= the stripe unit and the allocation offset is > * at the end of file. > */ > - if (!ap->flist->xbf_low && ap->aeof) { > + if (!ap->flist->dop_low && ap->aeof) { > if (!ap->offset) { > args.alignment = stripe_align; > atype = args.type; > @@ -3834,7 +3801,7 @@ xfs_bmap_btalloc( > args.minleft = 0; > if ((error = xfs_alloc_vextent(&args))) > return error; > - ap->flist->xbf_low = 1; > + ap->flist->dop_low = true; > } > if (args.fsbno != NULLFSBLOCK) { > /* > @@ -3844,7 +3811,7 @@ xfs_bmap_btalloc( > ASSERT(*ap->firstblock == NULLFSBLOCK || > XFS_FSB_TO_AGNO(mp, *ap->firstblock) == > XFS_FSB_TO_AGNO(mp, args.fsbno) || > - (ap->flist->xbf_low && > + (ap->flist->dop_low && > XFS_FSB_TO_AGNO(mp, *ap->firstblock) < > XFS_FSB_TO_AGNO(mp, args.fsbno))); > > @@ -3852,7 +3819,7 @@ xfs_bmap_btalloc( > if (*ap->firstblock == NULLFSBLOCK) > *ap->firstblock = args.fsbno; > ASSERT(nullfb || fb_agno == args.agno || > - (ap->flist->xbf_low && fb_agno < args.agno)); > + (ap->flist->dop_low && fb_agno < args.agno)); > ap->length = args.len; > ap->ip->i_d.di_nblocks += args.len; > xfs_trans_log_inode(ap->tp, ap->ip, XFS_ILOG_CORE); > @@ -4319,7 +4286,7 @@ xfs_bmapi_allocate( > if (error) > return error; > > - if (bma->flist->xbf_low) > + if (bma->flist->dop_low) > bma->minleft = 0; > if (bma->cur) > bma->cur->bc_private.b.firstblock = *bma->firstblock; > @@ -4684,7 +4651,7 @@ error0: > XFS_FSB_TO_AGNO(mp, *firstblock) == > XFS_FSB_TO_AGNO(mp, > bma.cur->bc_private.b.firstblock) || > - (flist->xbf_low && > + (flist->dop_low && > XFS_FSB_TO_AGNO(mp, *firstblock) < > XFS_FSB_TO_AGNO(mp, > bma.cur->bc_private.b.firstblock))); > diff --git a/fs/xfs/libxfs/xfs_bmap.h b/fs/xfs/libxfs/xfs_bmap.h > index f1f3ae6..891b728 100644 > --- a/fs/xfs/libxfs/xfs_bmap.h > +++ b/fs/xfs/libxfs/xfs_bmap.h > @@ -69,27 +69,6 @@ struct xfs_bmap_free_item > struct list_head xbfi_list; > }; > > -/* > - * Header for free extent list. > - * > - * xbf_low is used by the allocator to activate the lowspace algorithm - > - * when free space is running low the extent allocator may choose to > - * allocate an extent from an AG without leaving sufficient space for > - * a btree split when inserting the new extent. In this case the allocator > - * will enable the lowspace algorithm which is supposed to allow further > - * allocations (such as btree splits and newroots) to allocate from > - * sequential AGs. In order to avoid locking AGs out of order the lowspace > - * algorithm will start searching for free space from AG 0. If the correct > - * transaction reservations have been made then this algorithm will eventually > - * find all the space it needs. > - */ > -typedef struct xfs_bmap_free > -{ > - struct list_head xbf_flist; /* list of to-be-free extents */ > - int xbf_count; /* count of items on list */ > - int xbf_low; /* alloc in low mode */ > -} xfs_bmap_free_t; > - > #define XFS_BMAP_MAX_NMAP 4 > > /* > @@ -139,14 +118,6 @@ static inline int xfs_bmapi_aflag(int w) > #define DELAYSTARTBLOCK ((xfs_fsblock_t)-1LL) > #define HOLESTARTBLOCK ((xfs_fsblock_t)-2LL) > > -static inline void xfs_bmap_init(xfs_bmap_free_t *flp, xfs_fsblock_t *fbp) > -{ > - INIT_LIST_HEAD(&flp->xbf_flist); > - flp->xbf_count = 0; > - flp->xbf_low = 0; > - *fbp = NULLFSBLOCK; > -} > - > /* > * Flags for xfs_bmap_add_extent*. > */ > @@ -195,9 +166,6 @@ int xfs_bmap_add_attrfork(struct xfs_inode *ip, int size, int rsvd); > void xfs_bmap_local_to_extents_empty(struct xfs_inode *ip, int whichfork); > void xfs_bmap_add_free(struct xfs_mount *mp, struct xfs_bmap_free *flist, > xfs_fsblock_t bno, xfs_filblks_t len); > -void xfs_bmap_cancel(struct xfs_bmap_free *flist); > -int xfs_bmap_finish(struct xfs_trans **tp, struct xfs_bmap_free *flist, > - struct xfs_inode *ip); > void xfs_bmap_compute_maxlevels(struct xfs_mount *mp, int whichfork); > int xfs_bmap_first_unused(struct xfs_trans *tp, struct xfs_inode *ip, > xfs_extlen_t len, xfs_fileoff_t *unused, int whichfork); > diff --git a/fs/xfs/libxfs/xfs_bmap_btree.c b/fs/xfs/libxfs/xfs_bmap_btree.c > index 4f1a98e..1b7ba73 100644 > --- a/fs/xfs/libxfs/xfs_bmap_btree.c > +++ b/fs/xfs/libxfs/xfs_bmap_btree.c > @@ -23,6 +23,7 @@ > #include "xfs_trans_resv.h" > #include "xfs_bit.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_trans.h" > #include "xfs_inode_item.h" > @@ -462,7 +463,7 @@ xfs_bmbt_alloc_block( > * block allocation here and corrupt the filesystem. > */ > args.minleft = args.tp->t_blk_res; > - } else if (cur->bc_private.b.flist->xbf_low) { > + } else if (cur->bc_private.b.flist->dop_low) { > args.type = XFS_ALLOCTYPE_START_BNO; > } else { > args.type = XFS_ALLOCTYPE_NEAR_BNO; > @@ -490,7 +491,7 @@ xfs_bmbt_alloc_block( > error = xfs_alloc_vextent(&args); > if (error) > goto error0; > - cur->bc_private.b.flist->xbf_low = 1; > + cur->bc_private.b.flist->dop_low = true; > } > if (args.fsbno == NULLFSBLOCK) { > XFS_BTREE_TRACE_CURSOR(cur, XBT_EXIT); > diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c > index 6e716f4..5c4d221 100644 > --- a/fs/xfs/libxfs/xfs_btree.c > +++ b/fs/xfs/libxfs/xfs_btree.c > @@ -23,6 +23,7 @@ > #include "xfs_trans_resv.h" > #include "xfs_bit.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_trans.h" > #include "xfs_inode_item.h" > diff --git a/fs/xfs/libxfs/xfs_defer.h b/fs/xfs/libxfs/xfs_defer.h > index b9b5a92..8d25086 100644 > --- a/fs/xfs/libxfs/xfs_defer.h > +++ b/fs/xfs/libxfs/xfs_defer.h > @@ -93,4 +93,11 @@ struct xfs_defer_op_type { > > void xfs_defer_init_op_type(const struct xfs_defer_op_type *type); > > +/* XXX: compatibility shims, will go away in the next patch */ > +#define xfs_bmap_finish xfs_defer_finish > +#define xfs_bmap_cancel xfs_defer_cancel > +#define xfs_bmap_init xfs_defer_init > +#define xfs_bmap_free xfs_defer_ops > +typedef struct xfs_defer_ops xfs_bmap_free_t; > + > #endif /* __XFS_DEFER_H__ */ > diff --git a/fs/xfs/libxfs/xfs_dir2.c b/fs/xfs/libxfs/xfs_dir2.c > index af0f9d1..945c0345 100644 > --- a/fs/xfs/libxfs/xfs_dir2.c > +++ b/fs/xfs/libxfs/xfs_dir2.c > @@ -21,6 +21,7 @@ > #include "xfs_log_format.h" > #include "xfs_trans_resv.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_da_format.h" > #include "xfs_da_btree.h" > #include "xfs_inode.h" > diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c > index 4b1e408..c654310 100644 > --- a/fs/xfs/libxfs/xfs_ialloc.c > +++ b/fs/xfs/libxfs/xfs_ialloc.c > @@ -24,6 +24,7 @@ > #include "xfs_bit.h" > #include "xfs_sb.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_btree.h" > #include "xfs_ialloc.h" > diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c > index 9d9559e..4b9769e 100644 > --- a/fs/xfs/libxfs/xfs_inode_buf.c > +++ b/fs/xfs/libxfs/xfs_inode_buf.c > @@ -22,6 +22,7 @@ > #include "xfs_log_format.h" > #include "xfs_trans_resv.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_error.h" > #include "xfs_cksum.h" > diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c > index 12ca867..2194e5d 100644 > --- a/fs/xfs/libxfs/xfs_sb.c > +++ b/fs/xfs/libxfs/xfs_sb.c > @@ -24,6 +24,7 @@ > #include "xfs_bit.h" > #include "xfs_sb.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_ialloc.h" > #include "xfs_alloc.h" > diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c > index 998c3e6..d3c3d46 100644 > --- a/fs/xfs/xfs_bmap_util.c > +++ b/fs/xfs/xfs_bmap_util.c > @@ -25,6 +25,7 @@ > #include "xfs_bit.h" > #include "xfs_mount.h" > #include "xfs_da_format.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_btree.h" > #include "xfs_trans.h" > @@ -79,95 +80,6 @@ xfs_zero_extent( > GFP_NOFS, true); > } > > -/* Sort bmap items by AG. */ > -static int > -xfs_bmap_free_list_cmp( > - void *priv, > - struct list_head *a, > - struct list_head *b) > -{ > - struct xfs_mount *mp = priv; > - struct xfs_bmap_free_item *ra; > - struct xfs_bmap_free_item *rb; > - > - ra = container_of(a, struct xfs_bmap_free_item, xbfi_list); > - rb = container_of(b, struct xfs_bmap_free_item, xbfi_list); > - return XFS_FSB_TO_AGNO(mp, ra->xbfi_startblock) - > - XFS_FSB_TO_AGNO(mp, rb->xbfi_startblock); > -} > - > -/* > - * Routine to be called at transaction's end by xfs_bmapi, xfs_bunmapi > - * caller. Frees all the extents that need freeing, which must be done > - * last due to locking considerations. We never free any extents in > - * the first transaction. > - * > - * If an inode *ip is provided, rejoin it to the transaction if > - * the transaction was committed. > - */ > -int /* error */ > -xfs_bmap_finish( > - struct xfs_trans **tp, /* transaction pointer addr */ > - struct xfs_bmap_free *flist, /* i/o: list extents to free */ > - struct xfs_inode *ip) > -{ > - struct xfs_efd_log_item *efd; /* extent free data */ > - struct xfs_efi_log_item *efi; /* extent free intention */ > - int error; /* error return value */ > - int committed;/* xact committed or not */ > - struct xfs_bmap_free_item *free; /* free extent item */ > - > - ASSERT((*tp)->t_flags & XFS_TRANS_PERM_LOG_RES); > - if (flist->xbf_count == 0) > - return 0; > - > - list_sort((*tp)->t_mountp, &flist->xbf_flist, xfs_bmap_free_list_cmp); > - > - efi = xfs_trans_get_efi(*tp, flist->xbf_count); > - list_for_each_entry(free, &flist->xbf_flist, xbfi_list) > - xfs_trans_log_efi_extent(*tp, efi, free->xbfi_startblock, > - free->xbfi_blockcount); > - > - error = __xfs_trans_roll(tp, ip, &committed); > - if (error) { > - /* > - * If the transaction was committed, drop the EFD reference > - * since we're bailing out of here. The other reference is > - * dropped when the EFI hits the AIL. > - * > - * If the transaction was not committed, the EFI is freed by the > - * EFI item unlock handler on abort. Also, we have a new > - * transaction so we should return committed=1 even though we're > - * returning an error. > - */ > - if (committed) { > - xfs_efi_release(efi); > - xfs_force_shutdown((*tp)->t_mountp, > - SHUTDOWN_META_IO_ERROR); > - } > - return error; > - } > - > - /* > - * Get an EFD and free each extent in the list, logging to the EFD in > - * the process. The remaining bmap free list is cleaned up by the caller > - * on error. > - */ > - efd = xfs_trans_get_efd(*tp, efi, flist->xbf_count); > - while (!list_empty(&flist->xbf_flist)) { > - free = list_first_entry(&flist->xbf_flist, > - struct xfs_bmap_free_item, xbfi_list); > - error = xfs_trans_free_extent(*tp, efd, free->xbfi_startblock, > - free->xbfi_blockcount); > - if (error) > - return error; > - > - xfs_bmap_del_free(flist, free); > - } > - > - return 0; > -} > - > int > xfs_bmap_rtalloc( > struct xfs_bmalloca *ap) /* bmap alloc argument struct */ > @@ -815,7 +727,7 @@ xfs_bmap_punch_delalloc_range( > if (error) > break; > > - ASSERT(!flist.xbf_count && list_empty(&flist.xbf_flist)); > + ASSERT(!xfs_defer_has_unfinished_work(&flist)); > next_block: > start_fsb++; > remaining--; > diff --git a/fs/xfs/xfs_bmap_util.h b/fs/xfs/xfs_bmap_util.h > index f200714..51aadde 100644 > --- a/fs/xfs/xfs_bmap_util.h > +++ b/fs/xfs/xfs_bmap_util.h > @@ -40,8 +40,6 @@ int xfs_getbmap(struct xfs_inode *ip, struct getbmapx *bmv, > xfs_bmap_format_t formatter, void *arg); > > /* functions in xfs_bmap.c that are only needed by xfs_bmap_util.c */ > -void xfs_bmap_del_free(struct xfs_bmap_free *flist, > - struct xfs_bmap_free_item *free); > int xfs_bmap_extsize_align(struct xfs_mount *mp, struct xfs_bmbt_irec *gotp, > struct xfs_bmbt_irec *prevp, xfs_extlen_t extsz, > int rt, int eof, int delay, int convert, > diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c > index e064665..be17f0a 100644 > --- a/fs/xfs/xfs_dquot.c > +++ b/fs/xfs/xfs_dquot.c > @@ -23,6 +23,7 @@ > #include "xfs_trans_resv.h" > #include "xfs_bit.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_bmap.h" > #include "xfs_bmap_util.h" > diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c > index a51353a..3e990fb 100644 > --- a/fs/xfs/xfs_filestream.c > +++ b/fs/xfs/xfs_filestream.c > @@ -22,6 +22,7 @@ > #include "xfs_trans_resv.h" > #include "xfs_sb.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_bmap.h" > #include "xfs_bmap_util.h" > @@ -385,7 +386,7 @@ xfs_filestream_new_ag( > } > > flags = (ap->userdata ? XFS_PICK_USERDATA : 0) | > - (ap->flist->xbf_low ? XFS_PICK_LOWSPACE : 0); > + (ap->flist->dop_low ? XFS_PICK_LOWSPACE : 0); > > err = xfs_filestream_pick_ag(pip, startag, agp, flags, minlen); > > diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c > index 7191c38..4c191d2 100644 > --- a/fs/xfs/xfs_fsops.c > +++ b/fs/xfs/xfs_fsops.c > @@ -23,6 +23,7 @@ > #include "xfs_trans_resv.h" > #include "xfs_sb.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_da_format.h" > #include "xfs_da_btree.h" > #include "xfs_inode.h" > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index 8825bcf..d2389bb 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -25,6 +25,7 @@ > #include "xfs_trans_resv.h" > #include "xfs_sb.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_da_format.h" > #include "xfs_da_btree.h" > diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c > index 620fc91..023a4b4 100644 > --- a/fs/xfs/xfs_iomap.c > +++ b/fs/xfs/xfs_iomap.c > @@ -23,6 +23,7 @@ > #include "xfs_log_format.h" > #include "xfs_trans_resv.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_btree.h" > #include "xfs_bmap_btree.h" > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index 8359978..080b54b 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -24,6 +24,7 @@ > #include "xfs_bit.h" > #include "xfs_sb.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_da_format.h" > #include "xfs_da_btree.h" > #include "xfs_inode.h" > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index 970c19b..5f3ba88 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -24,6 +24,7 @@ > #include "xfs_bit.h" > #include "xfs_sb.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_da_format.h" > #include "xfs_da_btree.h" > #include "xfs_inode.h" > diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c > index 3938b37..627f7e6 100644 > --- a/fs/xfs/xfs_rtalloc.c > +++ b/fs/xfs/xfs_rtalloc.c > @@ -23,6 +23,7 @@ > #include "xfs_trans_resv.h" > #include "xfs_bit.h" > #include "xfs_mount.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_bmap.h" > #include "xfs_bmap_util.h" > diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c > index 08a46c6..20af47b 100644 > --- a/fs/xfs/xfs_symlink.c > +++ b/fs/xfs/xfs_symlink.c > @@ -26,6 +26,7 @@ > #include "xfs_mount.h" > #include "xfs_da_format.h" > #include "xfs_da_btree.h" > +#include "xfs_defer.h" > #include "xfs_dir2.h" > #include "xfs_inode.h" > #include "xfs_ialloc.h" > diff --git a/fs/xfs/xfs_trace.c b/fs/xfs/xfs_trace.c > index 3971527..7f17ae6 100644 > --- a/fs/xfs/xfs_trace.c > +++ b/fs/xfs/xfs_trace.c > @@ -24,6 +24,7 @@ > #include "xfs_mount.h" > #include "xfs_defer.h" > #include "xfs_da_format.h" > +#include "xfs_defer.h" > #include "xfs_inode.h" > #include "xfs_btree.h" > #include "xfs_da_btree.h" > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Aug 2 12:30:37 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 114B07CA4 for ; Tue, 2 Aug 2016 12:30:37 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id C8B8B8F8039 for ; Tue, 2 Aug 2016 10:30:36 -0700 (PDT) X-ASG-Debug-ID: 1470159035-0bf57c13672f4720001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id g7vPc2xZZltom9PJ (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 10:30:35 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DDC427DD0F; Tue, 2 Aug 2016 17:30:34 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72HUYGO030053; Tue, 2 Aug 2016 13:30:34 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id B9243120BDC; Tue, 2 Aug 2016 13:30:33 -0400 (EDT) Date: Tue, 2 Aug 2016 13:30:33 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 16/47] xfs: change xfs_bmap_{finish, cancel, init, free} -> xfs_defer_* Message-ID: <20160802173033.GD54148@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 16/47] xfs: change xfs_bmap_{finish, cancel, init, free} -> xfs_defer_* References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907707014.25461.326080392148826094.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907707014.25461.326080392148826094.stgit@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Tue, 02 Aug 2016 17:30:35 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470159035 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 5049 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 20, 2016 at 09:57:50PM -0700, Darrick J. Wong wrote: > Drop the compatibility shims that we were using to integrate the new > deferred operation mechanism into the existing code. No new code. > > v2: Also change xfs_bmap_free_item -> xfs_extent_free_item. > > Signed-off-by: Darrick J. Wong > --- > fs/xfs/libxfs/xfs_attr.c | 58 ++++++++++++++++++------------------ > fs/xfs/libxfs/xfs_attr_remote.c | 14 ++++----- > fs/xfs/libxfs/xfs_bmap.c | 46 ++++++++++++++--------------- > fs/xfs/libxfs/xfs_bmap.h | 18 ++++++----- > fs/xfs/libxfs/xfs_btree.h | 5 ++- > fs/xfs/libxfs/xfs_da_btree.h | 4 +-- > fs/xfs/libxfs/xfs_defer.h | 7 ---- > fs/xfs/libxfs/xfs_dir2.c | 6 ++-- > fs/xfs/libxfs/xfs_dir2.h | 8 +++-- > fs/xfs/libxfs/xfs_ialloc.c | 6 ++-- > fs/xfs/libxfs/xfs_ialloc.h | 2 + > fs/xfs/libxfs/xfs_trans_resv.c | 4 +-- > fs/xfs/xfs_bmap_util.c | 28 +++++++++--------- > fs/xfs/xfs_bmap_util.h | 2 + > fs/xfs/xfs_dquot.c | 10 +++--- > fs/xfs/xfs_inode.c | 62 ++++++++++++++++++++------------------- > fs/xfs/xfs_inode.h | 4 +-- > fs/xfs/xfs_iomap.c | 24 ++++++++------- > fs/xfs/xfs_rtalloc.c | 8 +++-- > fs/xfs/xfs_super.c | 2 + > fs/xfs/xfs_symlink.c | 16 +++++----- > fs/xfs/xfs_trans.h | 5 --- > fs/xfs/xfs_trans_extfree.c | 36 +++++++++++------------ > 23 files changed, 182 insertions(+), 193 deletions(-) > > ... > diff --git a/fs/xfs/xfs_trans_extfree.c b/fs/xfs/xfs_trans_extfree.c > index a9f34ee..b484902 100644 > --- a/fs/xfs/xfs_trans_extfree.c > +++ b/fs/xfs/xfs_trans_extfree.c > @@ -35,7 +35,7 @@ > * caller must use all nextents extents, because we are not > * flexible about this at all. > */ > -struct xfs_efi_log_item * > +STATIC struct xfs_efi_log_item * > xfs_trans_get_efi(struct xfs_trans *tp, I think we should just fold this into the one caller below. > uint nextents) > { > @@ -59,7 +59,7 @@ xfs_trans_get_efi(struct xfs_trans *tp, > * extent is to be logged as needing to be freed. It should > * be called once for each extent to be freed. > */ > -void > +STATIC void > xfs_trans_log_efi_extent(struct xfs_trans *tp, > struct xfs_efi_log_item *efip, > xfs_fsblock_t start_block, Same here. Otherwise looks good: Reviewed-by: Brian Foster > @@ -156,13 +156,13 @@ xfs_extent_free_diff_items( > struct list_head *b) > { > struct xfs_mount *mp = priv; > - struct xfs_bmap_free_item *ra; > - struct xfs_bmap_free_item *rb; > + struct xfs_extent_free_item *ra; > + struct xfs_extent_free_item *rb; > > - ra = container_of(a, struct xfs_bmap_free_item, xbfi_list); > - rb = container_of(b, struct xfs_bmap_free_item, xbfi_list); > - return XFS_FSB_TO_AGNO(mp, ra->xbfi_startblock) - > - XFS_FSB_TO_AGNO(mp, rb->xbfi_startblock); > + ra = container_of(a, struct xfs_extent_free_item, xefi_list); > + rb = container_of(b, struct xfs_extent_free_item, xefi_list); > + return XFS_FSB_TO_AGNO(mp, ra->xefi_startblock) - > + XFS_FSB_TO_AGNO(mp, rb->xefi_startblock); > } > > /* Get an EFI. */ > @@ -181,11 +181,11 @@ xfs_extent_free_log_item( > void *intent, > struct list_head *item) > { > - struct xfs_bmap_free_item *free; > + struct xfs_extent_free_item *free; > > - free = container_of(item, struct xfs_bmap_free_item, xbfi_list); > - xfs_trans_log_efi_extent(tp, intent, free->xbfi_startblock, > - free->xbfi_blockcount); > + free = container_of(item, struct xfs_extent_free_item, xefi_list); > + xfs_trans_log_efi_extent(tp, intent, free->xefi_startblock, > + free->xefi_blockcount); > } > > /* Get an EFD so we can process all the free extents. */ > @@ -207,13 +207,13 @@ xfs_extent_free_finish_item( > void *done_item, > void **state) > { > - struct xfs_bmap_free_item *free; > + struct xfs_extent_free_item *free; > int error; > > - free = container_of(item, struct xfs_bmap_free_item, xbfi_list); > + free = container_of(item, struct xfs_extent_free_item, xefi_list); > error = xfs_trans_free_extent(tp, done_item, > - free->xbfi_startblock, > - free->xbfi_blockcount); > + free->xefi_startblock, > + free->xefi_blockcount); > kmem_free(free); > return error; > } > @@ -231,9 +231,9 @@ STATIC void > xfs_extent_free_cancel_item( > struct list_head *item) > { > - struct xfs_bmap_free_item *free; > + struct xfs_extent_free_item *free; > > - free = container_of(item, struct xfs_bmap_free_item, xbfi_list); > + free = container_of(item, struct xfs_extent_free_item, xefi_list); > kmem_free(free); > } > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Aug 2 12:30:48 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 C5D3B7CA4 for ; Tue, 2 Aug 2016 12:30:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4F5DF304048 for ; Tue, 2 Aug 2016 10:30:45 -0700 (PDT) X-ASG-Debug-ID: 1470159039-0bf8157e6c3cc0d0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id nGPip8f74hzZoWPM (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 10:30:39 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7FB84C04B322; Tue, 2 Aug 2016 17:30:39 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72HUc3l023109; Tue, 2 Aug 2016 13:30:39 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 24F45120BDC; Tue, 2 Aug 2016 13:30:38 -0400 (EDT) Date: Tue, 2 Aug 2016 13:30:38 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 17/47] xfs: rename flist/free_list to dfops Message-ID: <20160802173037.GE54148@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 17/47] xfs: rename flist/free_list to dfops References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907707745.25461.6093481173463297003.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907707745.25461.6093481173463297003.stgit@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 02 Aug 2016 17:30:39 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470159039 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 72912 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 20, 2016 at 09:57:57PM -0700, Darrick J. Wong wrote: > Mechanical change of flist/free_list to dfops, since they're now > deferred ops, not just a freeing list. > > Signed-off-by: Darrick J. Wong > --- Reviewed-by: Brian Foster > fs/xfs/libxfs/xfs_attr.c | 62 ++++++++++----------- > fs/xfs/libxfs/xfs_attr_leaf.c | 4 + > fs/xfs/libxfs/xfs_attr_remote.c | 18 +++--- > fs/xfs/libxfs/xfs_bmap.c | 116 ++++++++++++++++++++------------------- > fs/xfs/libxfs/xfs_bmap.h | 10 ++- > fs/xfs/libxfs/xfs_bmap_btree.c | 14 ++--- > fs/xfs/libxfs/xfs_btree.h | 4 + > fs/xfs/libxfs/xfs_da_btree.c | 6 +- > fs/xfs/libxfs/xfs_da_btree.h | 2 - > fs/xfs/libxfs/xfs_dir2.c | 14 ++--- > fs/xfs/libxfs/xfs_dir2.h | 6 +- > fs/xfs/libxfs/xfs_ialloc.c | 14 ++--- > fs/xfs/libxfs/xfs_ialloc.h | 2 - > fs/xfs/xfs_bmap_util.c | 40 +++++++------ > fs/xfs/xfs_dquot.c | 10 ++- > fs/xfs/xfs_filestream.c | 2 - > fs/xfs/xfs_inode.c | 94 ++++++++++++++++---------------- > fs/xfs/xfs_iomap.c | 30 +++++----- > fs/xfs/xfs_rtalloc.c | 10 ++- > fs/xfs/xfs_symlink.c | 24 ++++---- > 20 files changed, 241 insertions(+), 241 deletions(-) > > > diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c > index 66baf97..af1ecb1 100644 > --- a/fs/xfs/libxfs/xfs_attr.c > +++ b/fs/xfs/libxfs/xfs_attr.c > @@ -204,7 +204,7 @@ xfs_attr_set( > { > struct xfs_mount *mp = dp->i_mount; > struct xfs_da_args args; > - struct xfs_defer_ops flist; > + struct xfs_defer_ops dfops; > struct xfs_trans_res tres; > xfs_fsblock_t firstblock; > int rsvd = (flags & ATTR_ROOT) != 0; > @@ -222,7 +222,7 @@ xfs_attr_set( > args.value = value; > args.valuelen = valuelen; > args.firstblock = &firstblock; > - args.flist = &flist; > + args.dfops = &dfops; > args.op_flags = XFS_DA_OP_ADDNAME | XFS_DA_OP_OKNOENT; > args.total = xfs_attr_calc_size(&args, &local); > > @@ -317,13 +317,13 @@ xfs_attr_set( > * It won't fit in the shortform, transform to a leaf block. > * GROT: another possible req'mt for a double-split btree op. > */ > - xfs_defer_init(args.flist, args.firstblock); > + xfs_defer_init(args.dfops, args.firstblock); > error = xfs_attr_shortform_to_leaf(&args); > if (!error) > - error = xfs_defer_finish(&args.trans, args.flist, dp); > + error = xfs_defer_finish(&args.trans, args.dfops, dp); > if (error) { > args.trans = NULL; > - xfs_defer_cancel(&flist); > + xfs_defer_cancel(&dfops); > goto out; > } > > @@ -383,7 +383,7 @@ xfs_attr_remove( > { > struct xfs_mount *mp = dp->i_mount; > struct xfs_da_args args; > - struct xfs_defer_ops flist; > + struct xfs_defer_ops dfops; > xfs_fsblock_t firstblock; > int error; > > @@ -400,7 +400,7 @@ xfs_attr_remove( > return error; > > args.firstblock = &firstblock; > - args.flist = &flist; > + args.dfops = &dfops; > > /* > * we have no control over the attribute names that userspace passes us > @@ -585,13 +585,13 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) > * Commit that transaction so that the node_addname() call > * can manage its own transactions. > */ > - xfs_defer_init(args->flist, args->firstblock); > + xfs_defer_init(args->dfops, args->firstblock); > error = xfs_attr3_leaf_to_node(args); > if (!error) > - error = xfs_defer_finish(&args->trans, args->flist, dp); > + error = xfs_defer_finish(&args->trans, args->dfops, dp); > if (error) { > args->trans = NULL; > - xfs_defer_cancel(args->flist); > + xfs_defer_cancel(args->dfops); > return error; > } > > @@ -675,15 +675,15 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) > * If the result is small enough, shrink it all into the inode. > */ > if ((forkoff = xfs_attr_shortform_allfit(bp, dp))) { > - xfs_defer_init(args->flist, args->firstblock); > + xfs_defer_init(args->dfops, args->firstblock); > error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); > /* bp is gone due to xfs_da_shrink_inode */ > if (!error) > error = xfs_defer_finish(&args->trans, > - args->flist, dp); > + args->dfops, dp); > if (error) { > args->trans = NULL; > - xfs_defer_cancel(args->flist); > + xfs_defer_cancel(args->dfops); > return error; > } > } > @@ -738,14 +738,14 @@ xfs_attr_leaf_removename(xfs_da_args_t *args) > * If the result is small enough, shrink it all into the inode. > */ > if ((forkoff = xfs_attr_shortform_allfit(bp, dp))) { > - xfs_defer_init(args->flist, args->firstblock); > + xfs_defer_init(args->dfops, args->firstblock); > error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); > /* bp is gone due to xfs_da_shrink_inode */ > if (!error) > - error = xfs_defer_finish(&args->trans, args->flist, dp); > + error = xfs_defer_finish(&args->trans, args->dfops, dp); > if (error) { > args->trans = NULL; > - xfs_defer_cancel(args->flist); > + xfs_defer_cancel(args->dfops); > return error; > } > } > @@ -864,14 +864,14 @@ restart: > */ > xfs_da_state_free(state); > state = NULL; > - xfs_defer_init(args->flist, args->firstblock); > + xfs_defer_init(args->dfops, args->firstblock); > error = xfs_attr3_leaf_to_node(args); > if (!error) > error = xfs_defer_finish(&args->trans, > - args->flist, dp); > + args->dfops, dp); > if (error) { > args->trans = NULL; > - xfs_defer_cancel(args->flist); > + xfs_defer_cancel(args->dfops); > goto out; > } > > @@ -892,13 +892,13 @@ restart: > * in the index/blkno/rmtblkno/rmtblkcnt fields and > * in the index2/blkno2/rmtblkno2/rmtblkcnt2 fields. > */ > - xfs_defer_init(args->flist, args->firstblock); > + xfs_defer_init(args->dfops, args->firstblock); > error = xfs_da3_split(state); > if (!error) > - error = xfs_defer_finish(&args->trans, args->flist, dp); > + error = xfs_defer_finish(&args->trans, args->dfops, dp); > if (error) { > args->trans = NULL; > - xfs_defer_cancel(args->flist); > + xfs_defer_cancel(args->dfops); > goto out; > } > } else { > @@ -991,14 +991,14 @@ restart: > * Check to see if the tree needs to be collapsed. > */ > if (retval && (state->path.active > 1)) { > - xfs_defer_init(args->flist, args->firstblock); > + xfs_defer_init(args->dfops, args->firstblock); > error = xfs_da3_join(state); > if (!error) > error = xfs_defer_finish(&args->trans, > - args->flist, dp); > + args->dfops, dp); > if (error) { > args->trans = NULL; > - xfs_defer_cancel(args->flist); > + xfs_defer_cancel(args->dfops); > goto out; > } > } > @@ -1114,13 +1114,13 @@ xfs_attr_node_removename(xfs_da_args_t *args) > * Check to see if the tree needs to be collapsed. > */ > if (retval && (state->path.active > 1)) { > - xfs_defer_init(args->flist, args->firstblock); > + xfs_defer_init(args->dfops, args->firstblock); > error = xfs_da3_join(state); > if (!error) > - error = xfs_defer_finish(&args->trans, args->flist, dp); > + error = xfs_defer_finish(&args->trans, args->dfops, dp); > if (error) { > args->trans = NULL; > - xfs_defer_cancel(args->flist); > + xfs_defer_cancel(args->dfops); > goto out; > } > /* > @@ -1147,15 +1147,15 @@ xfs_attr_node_removename(xfs_da_args_t *args) > goto out; > > if ((forkoff = xfs_attr_shortform_allfit(bp, dp))) { > - xfs_defer_init(args->flist, args->firstblock); > + xfs_defer_init(args->dfops, args->firstblock); > error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); > /* bp is gone due to xfs_da_shrink_inode */ > if (!error) > error = xfs_defer_finish(&args->trans, > - args->flist, dp); > + args->dfops, dp); > if (error) { > args->trans = NULL; > - xfs_defer_cancel(args->flist); > + xfs_defer_cancel(args->dfops); > goto out; > } > } else > diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c > index 01a5ecf..8ea91f3 100644 > --- a/fs/xfs/libxfs/xfs_attr_leaf.c > +++ b/fs/xfs/libxfs/xfs_attr_leaf.c > @@ -792,7 +792,7 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t *args) > nargs.dp = dp; > nargs.geo = args->geo; > nargs.firstblock = args->firstblock; > - nargs.flist = args->flist; > + nargs.dfops = args->dfops; > nargs.total = args->total; > nargs.whichfork = XFS_ATTR_FORK; > nargs.trans = args->trans; > @@ -922,7 +922,7 @@ xfs_attr3_leaf_to_shortform( > nargs.geo = args->geo; > nargs.dp = dp; > nargs.firstblock = args->firstblock; > - nargs.flist = args->flist; > + nargs.dfops = args->dfops; > nargs.total = args->total; > nargs.whichfork = XFS_ATTR_FORK; > nargs.trans = args->trans; > diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c > index aabb516..d52f525 100644 > --- a/fs/xfs/libxfs/xfs_attr_remote.c > +++ b/fs/xfs/libxfs/xfs_attr_remote.c > @@ -461,16 +461,16 @@ xfs_attr_rmtval_set( > * extent and then crash then the block may not contain the > * correct metadata after log recovery occurs. > */ > - xfs_defer_init(args->flist, args->firstblock); > + xfs_defer_init(args->dfops, args->firstblock); > nmap = 1; > error = xfs_bmapi_write(args->trans, dp, (xfs_fileoff_t)lblkno, > blkcnt, XFS_BMAPI_ATTRFORK, args->firstblock, > - args->total, &map, &nmap, args->flist); > + args->total, &map, &nmap, args->dfops); > if (!error) > - error = xfs_defer_finish(&args->trans, args->flist, dp); > + error = xfs_defer_finish(&args->trans, args->dfops, dp); > if (error) { > args->trans = NULL; > - xfs_defer_cancel(args->flist); > + xfs_defer_cancel(args->dfops); > return error; > } > > @@ -504,7 +504,7 @@ xfs_attr_rmtval_set( > > ASSERT(blkcnt > 0); > > - xfs_defer_init(args->flist, args->firstblock); > + xfs_defer_init(args->dfops, args->firstblock); > nmap = 1; > error = xfs_bmapi_read(dp, (xfs_fileoff_t)lblkno, > blkcnt, &map, &nmap, > @@ -604,16 +604,16 @@ xfs_attr_rmtval_remove( > blkcnt = args->rmtblkcnt; > done = 0; > while (!done) { > - xfs_defer_init(args->flist, args->firstblock); > + xfs_defer_init(args->dfops, args->firstblock); > error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt, > XFS_BMAPI_ATTRFORK, 1, args->firstblock, > - args->flist, &done); > + args->dfops, &done); > if (!error) > - error = xfs_defer_finish(&args->trans, args->flist, > + error = xfs_defer_finish(&args->trans, args->dfops, > args->dp); > if (error) { > args->trans = NULL; > - xfs_defer_cancel(args->flist); > + xfs_defer_cancel(args->dfops); > return error; > } > > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > index 71bf553..540a6b7 100644 > --- a/fs/xfs/libxfs/xfs_bmap.c > +++ b/fs/xfs/libxfs/xfs_bmap.c > @@ -572,7 +572,7 @@ xfs_bmap_validate_ret( > void > xfs_bmap_add_free( > struct xfs_mount *mp, /* mount point structure */ > - struct xfs_defer_ops *flist, /* list of extents */ > + struct xfs_defer_ops *dfops, /* list of extents */ > xfs_fsblock_t bno, /* fs block number of extent */ > xfs_filblks_t len) /* length of extent */ > { > @@ -596,7 +596,7 @@ xfs_bmap_add_free( > new = kmem_zone_alloc(xfs_bmap_free_item_zone, KM_SLEEP); > new->xefi_startblock = bno; > new->xefi_blockcount = (xfs_extlen_t)len; > - xfs_defer_add(flist, XFS_DEFER_OPS_TYPE_FREE, &new->xefi_list); > + xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_FREE, &new->xefi_list); > } > > /* > @@ -649,7 +649,7 @@ xfs_bmap_btree_to_extents( > cblock = XFS_BUF_TO_BLOCK(cbp); > if ((error = xfs_btree_check_block(cur, cblock, 0, cbp))) > return error; > - xfs_bmap_add_free(mp, cur->bc_private.b.flist, cbno, 1); > + xfs_bmap_add_free(mp, cur->bc_private.b.dfops, cbno, 1); > ip->i_d.di_nblocks--; > xfs_trans_mod_dquot_byino(tp, ip, XFS_TRANS_DQ_BCOUNT, -1L); > xfs_trans_binval(tp, cbp); > @@ -672,7 +672,7 @@ xfs_bmap_extents_to_btree( > xfs_trans_t *tp, /* transaction pointer */ > xfs_inode_t *ip, /* incore inode pointer */ > xfs_fsblock_t *firstblock, /* first-block-allocated */ > - struct xfs_defer_ops *flist, /* blocks freed in xaction */ > + struct xfs_defer_ops *dfops, /* blocks freed in xaction */ > xfs_btree_cur_t **curp, /* cursor returned to caller */ > int wasdel, /* converting a delayed alloc */ > int *logflagsp, /* inode logging flags */ > @@ -721,7 +721,7 @@ xfs_bmap_extents_to_btree( > */ > cur = xfs_bmbt_init_cursor(mp, tp, ip, whichfork); > cur->bc_private.b.firstblock = *firstblock; > - cur->bc_private.b.flist = flist; > + cur->bc_private.b.dfops = dfops; > cur->bc_private.b.flags = wasdel ? XFS_BTCUR_BPRV_WASDEL : 0; > /* > * Convert to a btree with two levels, one record in root. > @@ -734,7 +734,7 @@ xfs_bmap_extents_to_btree( > if (*firstblock == NULLFSBLOCK) { > args.type = XFS_ALLOCTYPE_START_BNO; > args.fsbno = XFS_INO_TO_FSB(mp, ip->i_ino); > - } else if (flist->dop_low) { > + } else if (dfops->dop_low) { > args.type = XFS_ALLOCTYPE_START_BNO; > args.fsbno = *firstblock; > } else { > @@ -755,7 +755,7 @@ xfs_bmap_extents_to_btree( > ASSERT(args.fsbno != NULLFSBLOCK); > ASSERT(*firstblock == NULLFSBLOCK || > args.agno == XFS_FSB_TO_AGNO(mp, *firstblock) || > - (flist->dop_low && > + (dfops->dop_low && > args.agno > XFS_FSB_TO_AGNO(mp, *firstblock))); > *firstblock = cur->bc_private.b.firstblock = args.fsbno; > cur->bc_private.b.allocated++; > @@ -940,7 +940,7 @@ xfs_bmap_add_attrfork_btree( > xfs_trans_t *tp, /* transaction pointer */ > xfs_inode_t *ip, /* incore inode pointer */ > xfs_fsblock_t *firstblock, /* first block allocated */ > - struct xfs_defer_ops *flist, /* blocks to free at commit */ > + struct xfs_defer_ops *dfops, /* blocks to free at commit */ > int *flags) /* inode logging flags */ > { > xfs_btree_cur_t *cur; /* btree cursor */ > @@ -953,7 +953,7 @@ xfs_bmap_add_attrfork_btree( > *flags |= XFS_ILOG_DBROOT; > else { > cur = xfs_bmbt_init_cursor(mp, tp, ip, XFS_DATA_FORK); > - cur->bc_private.b.flist = flist; > + cur->bc_private.b.dfops = dfops; > cur->bc_private.b.firstblock = *firstblock; > if ((error = xfs_bmbt_lookup_ge(cur, 0, 0, 0, &stat))) > goto error0; > @@ -983,7 +983,7 @@ xfs_bmap_add_attrfork_extents( > xfs_trans_t *tp, /* transaction pointer */ > xfs_inode_t *ip, /* incore inode pointer */ > xfs_fsblock_t *firstblock, /* first block allocated */ > - struct xfs_defer_ops *flist, /* blocks to free at commit */ > + struct xfs_defer_ops *dfops, /* blocks to free at commit */ > int *flags) /* inode logging flags */ > { > xfs_btree_cur_t *cur; /* bmap btree cursor */ > @@ -992,7 +992,7 @@ xfs_bmap_add_attrfork_extents( > if (ip->i_d.di_nextents * sizeof(xfs_bmbt_rec_t) <= XFS_IFORK_DSIZE(ip)) > return 0; > cur = NULL; > - error = xfs_bmap_extents_to_btree(tp, ip, firstblock, flist, &cur, 0, > + error = xfs_bmap_extents_to_btree(tp, ip, firstblock, dfops, &cur, 0, > flags, XFS_DATA_FORK); > if (cur) { > cur->bc_private.b.allocated = 0; > @@ -1018,7 +1018,7 @@ xfs_bmap_add_attrfork_local( > xfs_trans_t *tp, /* transaction pointer */ > xfs_inode_t *ip, /* incore inode pointer */ > xfs_fsblock_t *firstblock, /* first block allocated */ > - struct xfs_defer_ops *flist, /* blocks to free at commit */ > + struct xfs_defer_ops *dfops, /* blocks to free at commit */ > int *flags) /* inode logging flags */ > { > xfs_da_args_t dargs; /* args for dir/attr code */ > @@ -1031,7 +1031,7 @@ xfs_bmap_add_attrfork_local( > dargs.geo = ip->i_mount->m_dir_geo; > dargs.dp = ip; > dargs.firstblock = firstblock; > - dargs.flist = flist; > + dargs.dfops = dfops; > dargs.total = dargs.geo->fsbcount; > dargs.whichfork = XFS_DATA_FORK; > dargs.trans = tp; > @@ -1059,7 +1059,7 @@ xfs_bmap_add_attrfork( > int rsvd) /* xact may use reserved blks */ > { > xfs_fsblock_t firstblock; /* 1st block/ag allocated */ > - struct xfs_defer_ops flist; /* freed extent records */ > + struct xfs_defer_ops dfops; /* freed extent records */ > xfs_mount_t *mp; /* mount structure */ > xfs_trans_t *tp; /* transaction pointer */ > int blks; /* space reservation */ > @@ -1125,18 +1125,18 @@ xfs_bmap_add_attrfork( > ip->i_afp = kmem_zone_zalloc(xfs_ifork_zone, KM_SLEEP); > ip->i_afp->if_flags = XFS_IFEXTENTS; > logflags = 0; > - xfs_defer_init(&flist, &firstblock); > + xfs_defer_init(&dfops, &firstblock); > switch (ip->i_d.di_format) { > case XFS_DINODE_FMT_LOCAL: > - error = xfs_bmap_add_attrfork_local(tp, ip, &firstblock, &flist, > + error = xfs_bmap_add_attrfork_local(tp, ip, &firstblock, &dfops, > &logflags); > break; > case XFS_DINODE_FMT_EXTENTS: > error = xfs_bmap_add_attrfork_extents(tp, ip, &firstblock, > - &flist, &logflags); > + &dfops, &logflags); > break; > case XFS_DINODE_FMT_BTREE: > - error = xfs_bmap_add_attrfork_btree(tp, ip, &firstblock, &flist, > + error = xfs_bmap_add_attrfork_btree(tp, ip, &firstblock, &dfops, > &logflags); > break; > default: > @@ -1165,7 +1165,7 @@ xfs_bmap_add_attrfork( > xfs_log_sb(tp); > } > > - error = xfs_defer_finish(&tp, &flist, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) > goto bmap_cancel; > error = xfs_trans_commit(tp); > @@ -1173,7 +1173,7 @@ xfs_bmap_add_attrfork( > return error; > > bmap_cancel: > - xfs_defer_cancel(&flist); > + xfs_defer_cancel(&dfops); > trans_cancel: > xfs_trans_cancel(tp); > xfs_iunlock(ip, XFS_ILOCK_EXCL); > @@ -1970,7 +1970,7 @@ xfs_bmap_add_extent_delay_real( > > if (xfs_bmap_needs_btree(bma->ip, whichfork)) { > error = xfs_bmap_extents_to_btree(bma->tp, bma->ip, > - bma->firstblock, bma->flist, > + bma->firstblock, bma->dfops, > &bma->cur, 1, &tmp_rval, whichfork); > rval |= tmp_rval; > if (error) > @@ -2054,7 +2054,7 @@ xfs_bmap_add_extent_delay_real( > > if (xfs_bmap_needs_btree(bma->ip, whichfork)) { > error = xfs_bmap_extents_to_btree(bma->tp, bma->ip, > - bma->firstblock, bma->flist, &bma->cur, 1, > + bma->firstblock, bma->dfops, &bma->cur, 1, > &tmp_rval, whichfork); > rval |= tmp_rval; > if (error) > @@ -2123,7 +2123,7 @@ xfs_bmap_add_extent_delay_real( > > if (xfs_bmap_needs_btree(bma->ip, whichfork)) { > error = xfs_bmap_extents_to_btree(bma->tp, bma->ip, > - bma->firstblock, bma->flist, &bma->cur, > + bma->firstblock, bma->dfops, &bma->cur, > 1, &tmp_rval, whichfork); > rval |= tmp_rval; > if (error) > @@ -2172,7 +2172,7 @@ xfs_bmap_add_extent_delay_real( > > ASSERT(bma->cur == NULL); > error = xfs_bmap_extents_to_btree(bma->tp, bma->ip, > - bma->firstblock, bma->flist, &bma->cur, > + bma->firstblock, bma->dfops, &bma->cur, > da_old > 0, &tmp_logflags, whichfork); > bma->logflags |= tmp_logflags; > if (error) > @@ -2214,7 +2214,7 @@ xfs_bmap_add_extent_unwritten_real( > xfs_btree_cur_t **curp, /* if *curp is null, not a btree */ > xfs_bmbt_irec_t *new, /* new data to add to file extents */ > xfs_fsblock_t *first, /* pointer to firstblock variable */ > - struct xfs_defer_ops *flist, /* list of extents to be freed */ > + struct xfs_defer_ops *dfops, /* list of extents to be freed */ > int *logflagsp) /* inode logging flags */ > { > xfs_btree_cur_t *cur; /* btree cursor */ > @@ -2707,7 +2707,7 @@ xfs_bmap_add_extent_unwritten_real( > int tmp_logflags; /* partial log flag return val */ > > ASSERT(cur == NULL); > - error = xfs_bmap_extents_to_btree(tp, ip, first, flist, &cur, > + error = xfs_bmap_extents_to_btree(tp, ip, first, dfops, &cur, > 0, &tmp_logflags, XFS_DATA_FORK); > *logflagsp |= tmp_logflags; > if (error) > @@ -3100,7 +3100,7 @@ xfs_bmap_add_extent_hole_real( > > ASSERT(bma->cur == NULL); > error = xfs_bmap_extents_to_btree(bma->tp, bma->ip, > - bma->firstblock, bma->flist, &bma->cur, > + bma->firstblock, bma->dfops, &bma->cur, > 0, &tmp_logflags, whichfork); > bma->logflags |= tmp_logflags; > if (error) > @@ -3675,7 +3675,7 @@ xfs_bmap_btalloc( > error = xfs_bmap_btalloc_nullfb(ap, &args, &blen); > if (error) > return error; > - } else if (ap->flist->dop_low) { > + } else if (ap->dfops->dop_low) { > if (xfs_inode_is_filestream(ap->ip)) > args.type = XFS_ALLOCTYPE_FIRST_AG; > else > @@ -3708,7 +3708,7 @@ xfs_bmap_btalloc( > * is >= the stripe unit and the allocation offset is > * at the end of file. > */ > - if (!ap->flist->dop_low && ap->aeof) { > + if (!ap->dfops->dop_low && ap->aeof) { > if (!ap->offset) { > args.alignment = stripe_align; > atype = args.type; > @@ -3801,7 +3801,7 @@ xfs_bmap_btalloc( > args.minleft = 0; > if ((error = xfs_alloc_vextent(&args))) > return error; > - ap->flist->dop_low = true; > + ap->dfops->dop_low = true; > } > if (args.fsbno != NULLFSBLOCK) { > /* > @@ -3811,7 +3811,7 @@ xfs_bmap_btalloc( > ASSERT(*ap->firstblock == NULLFSBLOCK || > XFS_FSB_TO_AGNO(mp, *ap->firstblock) == > XFS_FSB_TO_AGNO(mp, args.fsbno) || > - (ap->flist->dop_low && > + (ap->dfops->dop_low && > XFS_FSB_TO_AGNO(mp, *ap->firstblock) < > XFS_FSB_TO_AGNO(mp, args.fsbno))); > > @@ -3819,7 +3819,7 @@ xfs_bmap_btalloc( > if (*ap->firstblock == NULLFSBLOCK) > *ap->firstblock = args.fsbno; > ASSERT(nullfb || fb_agno == args.agno || > - (ap->flist->dop_low && fb_agno < args.agno)); > + (ap->dfops->dop_low && fb_agno < args.agno)); > ap->length = args.len; > ap->ip->i_d.di_nblocks += args.len; > xfs_trans_log_inode(ap->tp, ap->ip, XFS_ILOG_CORE); > @@ -4286,7 +4286,7 @@ xfs_bmapi_allocate( > if (error) > return error; > > - if (bma->flist->dop_low) > + if (bma->dfops->dop_low) > bma->minleft = 0; > if (bma->cur) > bma->cur->bc_private.b.firstblock = *bma->firstblock; > @@ -4295,7 +4295,7 @@ xfs_bmapi_allocate( > if ((ifp->if_flags & XFS_IFBROOT) && !bma->cur) { > bma->cur = xfs_bmbt_init_cursor(mp, bma->tp, bma->ip, whichfork); > bma->cur->bc_private.b.firstblock = *bma->firstblock; > - bma->cur->bc_private.b.flist = bma->flist; > + bma->cur->bc_private.b.dfops = bma->dfops; > } > /* > * Bump the number of extents we've allocated > @@ -4376,7 +4376,7 @@ xfs_bmapi_convert_unwritten( > bma->cur = xfs_bmbt_init_cursor(bma->ip->i_mount, bma->tp, > bma->ip, whichfork); > bma->cur->bc_private.b.firstblock = *bma->firstblock; > - bma->cur->bc_private.b.flist = bma->flist; > + bma->cur->bc_private.b.dfops = bma->dfops; > } > mval->br_state = (mval->br_state == XFS_EXT_UNWRITTEN) > ? XFS_EXT_NORM : XFS_EXT_UNWRITTEN; > @@ -4393,7 +4393,7 @@ xfs_bmapi_convert_unwritten( > } > > error = xfs_bmap_add_extent_unwritten_real(bma->tp, bma->ip, &bma->idx, > - &bma->cur, mval, bma->firstblock, bma->flist, > + &bma->cur, mval, bma->firstblock, bma->dfops, > &tmp_logflags); > /* > * Log the inode core unconditionally in the unwritten extent conversion > @@ -4447,7 +4447,7 @@ xfs_bmapi_write( > xfs_extlen_t total, /* total blocks needed */ > struct xfs_bmbt_irec *mval, /* output: map values */ > int *nmap, /* i/o: mval size/count */ > - struct xfs_defer_ops *flist) /* i/o: list extents to free */ > + struct xfs_defer_ops *dfops) /* i/o: list extents to free */ > { > struct xfs_mount *mp = ip->i_mount; > struct xfs_ifork *ifp; > @@ -4537,7 +4537,7 @@ xfs_bmapi_write( > bma.ip = ip; > bma.total = total; > bma.userdata = 0; > - bma.flist = flist; > + bma.dfops = dfops; > bma.firstblock = firstblock; > > while (bno < end && n < *nmap) { > @@ -4651,7 +4651,7 @@ error0: > XFS_FSB_TO_AGNO(mp, *firstblock) == > XFS_FSB_TO_AGNO(mp, > bma.cur->bc_private.b.firstblock) || > - (flist->dop_low && > + (dfops->dop_low && > XFS_FSB_TO_AGNO(mp, *firstblock) < > XFS_FSB_TO_AGNO(mp, > bma.cur->bc_private.b.firstblock))); > @@ -4735,7 +4735,7 @@ xfs_bmap_del_extent( > xfs_inode_t *ip, /* incore inode pointer */ > xfs_trans_t *tp, /* current transaction pointer */ > xfs_extnum_t *idx, /* extent number to update/delete */ > - struct xfs_defer_ops *flist, /* list of extents to be freed */ > + struct xfs_defer_ops *dfops, /* list of extents to be freed */ > xfs_btree_cur_t *cur, /* if null, not a btree */ > xfs_bmbt_irec_t *del, /* data to remove from extents */ > int *logflagsp, /* inode logging flags */ > @@ -5023,7 +5023,7 @@ xfs_bmap_del_extent( > * If we need to, add to list of extents to delete. > */ > if (do_fx) > - xfs_bmap_add_free(mp, flist, del->br_startblock, > + xfs_bmap_add_free(mp, dfops, del->br_startblock, > del->br_blockcount); > /* > * Adjust inode # blocks in the file. > @@ -5064,7 +5064,7 @@ xfs_bunmapi( > xfs_extnum_t nexts, /* number of extents max */ > xfs_fsblock_t *firstblock, /* first allocated block > controls a.g. for allocs */ > - struct xfs_defer_ops *flist, /* i/o: list extents to free */ > + struct xfs_defer_ops *dfops, /* i/o: list extents to free */ > int *done) /* set if not done yet */ > { > xfs_btree_cur_t *cur; /* bmap btree cursor */ > @@ -5137,7 +5137,7 @@ xfs_bunmapi( > ASSERT(XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_BTREE); > cur = xfs_bmbt_init_cursor(mp, tp, ip, whichfork); > cur->bc_private.b.firstblock = *firstblock; > - cur->bc_private.b.flist = flist; > + cur->bc_private.b.dfops = dfops; > cur->bc_private.b.flags = 0; > } else > cur = NULL; > @@ -5231,7 +5231,7 @@ xfs_bunmapi( > } > del.br_state = XFS_EXT_UNWRITTEN; > error = xfs_bmap_add_extent_unwritten_real(tp, ip, > - &lastx, &cur, &del, firstblock, flist, > + &lastx, &cur, &del, firstblock, dfops, > &logflags); > if (error) > goto error0; > @@ -5290,7 +5290,7 @@ xfs_bunmapi( > lastx--; > error = xfs_bmap_add_extent_unwritten_real(tp, > ip, &lastx, &cur, &prev, > - firstblock, flist, &logflags); > + firstblock, dfops, &logflags); > if (error) > goto error0; > goto nodelete; > @@ -5299,7 +5299,7 @@ xfs_bunmapi( > del.br_state = XFS_EXT_UNWRITTEN; > error = xfs_bmap_add_extent_unwritten_real(tp, > ip, &lastx, &cur, &del, > - firstblock, flist, &logflags); > + firstblock, dfops, &logflags); > if (error) > goto error0; > goto nodelete; > @@ -5357,7 +5357,7 @@ xfs_bunmapi( > } else if (cur) > cur->bc_private.b.flags &= ~XFS_BTCUR_BPRV_WASDEL; > > - error = xfs_bmap_del_extent(ip, tp, &lastx, flist, cur, &del, > + error = xfs_bmap_del_extent(ip, tp, &lastx, dfops, cur, &del, > &tmp_logflags, whichfork); > logflags |= tmp_logflags; > if (error) > @@ -5391,7 +5391,7 @@ nodelete: > */ > if (xfs_bmap_needs_btree(ip, whichfork)) { > ASSERT(cur == NULL); > - error = xfs_bmap_extents_to_btree(tp, ip, firstblock, flist, > + error = xfs_bmap_extents_to_btree(tp, ip, firstblock, dfops, > &cur, 0, &tmp_logflags, whichfork); > logflags |= tmp_logflags; > if (error) > @@ -5680,7 +5680,7 @@ xfs_bmap_shift_extents( > int *done, > xfs_fileoff_t stop_fsb, > xfs_fsblock_t *firstblock, > - struct xfs_defer_ops *flist, > + struct xfs_defer_ops *dfops, > enum shift_direction direction, > int num_exts) > { > @@ -5725,7 +5725,7 @@ xfs_bmap_shift_extents( > if (ifp->if_flags & XFS_IFBROOT) { > cur = xfs_bmbt_init_cursor(mp, tp, ip, whichfork); > cur->bc_private.b.firstblock = *firstblock; > - cur->bc_private.b.flist = flist; > + cur->bc_private.b.dfops = dfops; > cur->bc_private.b.flags = 0; > } > > @@ -5834,7 +5834,7 @@ xfs_bmap_split_extent_at( > struct xfs_inode *ip, > xfs_fileoff_t split_fsb, > xfs_fsblock_t *firstfsb, > - struct xfs_defer_ops *free_list) > + struct xfs_defer_ops *dfops) > { > int whichfork = XFS_DATA_FORK; > struct xfs_btree_cur *cur = NULL; > @@ -5896,7 +5896,7 @@ xfs_bmap_split_extent_at( > if (ifp->if_flags & XFS_IFBROOT) { > cur = xfs_bmbt_init_cursor(mp, tp, ip, whichfork); > cur->bc_private.b.firstblock = *firstfsb; > - cur->bc_private.b.flist = free_list; > + cur->bc_private.b.dfops = dfops; > cur->bc_private.b.flags = 0; > error = xfs_bmbt_lookup_eq(cur, got.br_startoff, > got.br_startblock, > @@ -5949,7 +5949,7 @@ xfs_bmap_split_extent_at( > int tmp_logflags; /* partial log flag return val */ > > ASSERT(cur == NULL); > - error = xfs_bmap_extents_to_btree(tp, ip, firstfsb, free_list, > + error = xfs_bmap_extents_to_btree(tp, ip, firstfsb, dfops, > &cur, 0, &tmp_logflags, whichfork); > logflags |= tmp_logflags; > } > @@ -5973,7 +5973,7 @@ xfs_bmap_split_extent( > { > struct xfs_mount *mp = ip->i_mount; > struct xfs_trans *tp; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > xfs_fsblock_t firstfsb; > int error; > > @@ -5985,21 +5985,21 @@ xfs_bmap_split_extent( > xfs_ilock(ip, XFS_ILOCK_EXCL); > xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); > > - xfs_defer_init(&free_list, &firstfsb); > + xfs_defer_init(&dfops, &firstfsb); > > error = xfs_bmap_split_extent_at(tp, ip, split_fsb, > - &firstfsb, &free_list); > + &firstfsb, &dfops); > if (error) > goto out; > > - error = xfs_defer_finish(&tp, &free_list, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) > goto out; > > return xfs_trans_commit(tp); > > out: > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > xfs_trans_cancel(tp); > return error; > } > diff --git a/fs/xfs/libxfs/xfs_bmap.h b/fs/xfs/libxfs/xfs_bmap.h > index 3dc8393..dc01bb8 100644 > --- a/fs/xfs/libxfs/xfs_bmap.h > +++ b/fs/xfs/libxfs/xfs_bmap.h > @@ -32,7 +32,7 @@ extern kmem_zone_t *xfs_bmap_free_item_zone; > */ > struct xfs_bmalloca { > xfs_fsblock_t *firstblock; /* i/o first block allocated */ > - struct xfs_defer_ops *flist; /* bmap freelist */ > + struct xfs_defer_ops *dfops; /* bmap freelist */ > struct xfs_trans *tp; /* transaction pointer */ > struct xfs_inode *ip; /* incore inode pointer */ > struct xfs_bmbt_irec prev; /* extent before the new one */ > @@ -164,7 +164,7 @@ void xfs_bmap_trace_exlist(struct xfs_inode *ip, xfs_extnum_t cnt, > > int xfs_bmap_add_attrfork(struct xfs_inode *ip, int size, int rsvd); > void xfs_bmap_local_to_extents_empty(struct xfs_inode *ip, int whichfork); > -void xfs_bmap_add_free(struct xfs_mount *mp, struct xfs_defer_ops *flist, > +void xfs_bmap_add_free(struct xfs_mount *mp, struct xfs_defer_ops *dfops, > xfs_fsblock_t bno, xfs_filblks_t len); > void xfs_bmap_compute_maxlevels(struct xfs_mount *mp, int whichfork); > int xfs_bmap_first_unused(struct xfs_trans *tp, struct xfs_inode *ip, > @@ -186,18 +186,18 @@ int xfs_bmapi_write(struct xfs_trans *tp, struct xfs_inode *ip, > xfs_fileoff_t bno, xfs_filblks_t len, int flags, > xfs_fsblock_t *firstblock, xfs_extlen_t total, > struct xfs_bmbt_irec *mval, int *nmap, > - struct xfs_defer_ops *flist); > + struct xfs_defer_ops *dfops); > int xfs_bunmapi(struct xfs_trans *tp, struct xfs_inode *ip, > xfs_fileoff_t bno, xfs_filblks_t len, int flags, > xfs_extnum_t nexts, xfs_fsblock_t *firstblock, > - struct xfs_defer_ops *flist, int *done); > + struct xfs_defer_ops *dfops, int *done); > int xfs_check_nostate_extents(struct xfs_ifork *ifp, xfs_extnum_t idx, > xfs_extnum_t num); > uint xfs_default_attroffset(struct xfs_inode *ip); > int xfs_bmap_shift_extents(struct xfs_trans *tp, struct xfs_inode *ip, > xfs_fileoff_t *next_fsb, xfs_fileoff_t offset_shift_fsb, > int *done, xfs_fileoff_t stop_fsb, xfs_fsblock_t *firstblock, > - struct xfs_defer_ops *flist, enum shift_direction direction, > + struct xfs_defer_ops *dfops, enum shift_direction direction, > int num_exts); > int xfs_bmap_split_extent(struct xfs_inode *ip, xfs_fileoff_t split_offset); > > diff --git a/fs/xfs/libxfs/xfs_bmap_btree.c b/fs/xfs/libxfs/xfs_bmap_btree.c > index 1b7ba73..0df5318 100644 > --- a/fs/xfs/libxfs/xfs_bmap_btree.c > +++ b/fs/xfs/libxfs/xfs_bmap_btree.c > @@ -407,11 +407,11 @@ xfs_bmbt_dup_cursor( > cur->bc_private.b.ip, cur->bc_private.b.whichfork); > > /* > - * Copy the firstblock, flist, and flags values, > + * Copy the firstblock, dfops, and flags values, > * since init cursor doesn't get them. > */ > new->bc_private.b.firstblock = cur->bc_private.b.firstblock; > - new->bc_private.b.flist = cur->bc_private.b.flist; > + new->bc_private.b.dfops = cur->bc_private.b.dfops; > new->bc_private.b.flags = cur->bc_private.b.flags; > > return new; > @@ -424,7 +424,7 @@ xfs_bmbt_update_cursor( > { > ASSERT((dst->bc_private.b.firstblock != NULLFSBLOCK) || > (dst->bc_private.b.ip->i_d.di_flags & XFS_DIFLAG_REALTIME)); > - ASSERT(dst->bc_private.b.flist == src->bc_private.b.flist); > + ASSERT(dst->bc_private.b.dfops == src->bc_private.b.dfops); > > dst->bc_private.b.allocated += src->bc_private.b.allocated; > dst->bc_private.b.firstblock = src->bc_private.b.firstblock; > @@ -463,7 +463,7 @@ xfs_bmbt_alloc_block( > * block allocation here and corrupt the filesystem. > */ > args.minleft = args.tp->t_blk_res; > - } else if (cur->bc_private.b.flist->dop_low) { > + } else if (cur->bc_private.b.dfops->dop_low) { > args.type = XFS_ALLOCTYPE_START_BNO; > } else { > args.type = XFS_ALLOCTYPE_NEAR_BNO; > @@ -491,7 +491,7 @@ xfs_bmbt_alloc_block( > error = xfs_alloc_vextent(&args); > if (error) > goto error0; > - cur->bc_private.b.flist->dop_low = true; > + cur->bc_private.b.dfops->dop_low = true; > } > if (args.fsbno == NULLFSBLOCK) { > XFS_BTREE_TRACE_CURSOR(cur, XBT_EXIT); > @@ -527,7 +527,7 @@ xfs_bmbt_free_block( > struct xfs_trans *tp = cur->bc_tp; > xfs_fsblock_t fsbno = XFS_DADDR_TO_FSB(mp, XFS_BUF_ADDR(bp)); > > - xfs_bmap_add_free(mp, cur->bc_private.b.flist, fsbno, 1); > + xfs_bmap_add_free(mp, cur->bc_private.b.dfops, fsbno, 1); > ip->i_d.di_nblocks--; > > xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); > @@ -793,7 +793,7 @@ xfs_bmbt_init_cursor( > cur->bc_private.b.forksize = XFS_IFORK_SIZE(ip, whichfork); > cur->bc_private.b.ip = ip; > cur->bc_private.b.firstblock = NULLFSBLOCK; > - cur->bc_private.b.flist = NULL; > + cur->bc_private.b.dfops = NULL; > cur->bc_private.b.allocated = 0; > cur->bc_private.b.flags = 0; > cur->bc_private.b.whichfork = whichfork; > diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h > index 6713af3..b8bbb21 100644 > --- a/fs/xfs/libxfs/xfs_btree.h > +++ b/fs/xfs/libxfs/xfs_btree.h > @@ -255,12 +255,12 @@ typedef struct xfs_btree_cur > union { > struct { /* needed for BNO, CNT, INO */ > struct xfs_buf *agbp; /* agf/agi buffer pointer */ > - struct xfs_defer_ops *flist; /* deferred updates */ > + struct xfs_defer_ops *dfops; /* deferred updates */ > xfs_agnumber_t agno; /* ag number */ > } a; > struct { /* needed for BMAP */ > struct xfs_inode *ip; /* pointer to our inode */ > - struct xfs_defer_ops *flist; /* deferred updates */ > + struct xfs_defer_ops *dfops; /* deferred updates */ > xfs_fsblock_t firstblock; /* 1st blk allocated */ > int allocated; /* count of alloced */ > short forksize; /* fork's inode space */ > diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c > index 097bf77..68594c7 100644 > --- a/fs/xfs/libxfs/xfs_da_btree.c > +++ b/fs/xfs/libxfs/xfs_da_btree.c > @@ -2030,7 +2030,7 @@ xfs_da_grow_inode_int( > error = xfs_bmapi_write(tp, dp, *bno, count, > xfs_bmapi_aflag(w)|XFS_BMAPI_METADATA|XFS_BMAPI_CONTIG, > args->firstblock, args->total, &map, &nmap, > - args->flist); > + args->dfops); > if (error) > return error; > > @@ -2053,7 +2053,7 @@ xfs_da_grow_inode_int( > error = xfs_bmapi_write(tp, dp, b, c, > xfs_bmapi_aflag(w)|XFS_BMAPI_METADATA, > args->firstblock, args->total, > - &mapp[mapi], &nmap, args->flist); > + &mapp[mapi], &nmap, args->dfops); > if (error) > goto out_free_map; > if (nmap < 1) > @@ -2363,7 +2363,7 @@ xfs_da_shrink_inode( > */ > error = xfs_bunmapi(tp, dp, dead_blkno, count, > xfs_bmapi_aflag(w), 0, args->firstblock, > - args->flist, &done); > + args->dfops, &done); > if (error == -ENOSPC) { > if (w != XFS_DATA_FORK) > break; > diff --git a/fs/xfs/libxfs/xfs_da_btree.h b/fs/xfs/libxfs/xfs_da_btree.h > index 249813a..98c75cb 100644 > --- a/fs/xfs/libxfs/xfs_da_btree.h > +++ b/fs/xfs/libxfs/xfs_da_btree.h > @@ -70,7 +70,7 @@ typedef struct xfs_da_args { > xfs_ino_t inumber; /* input/output inode number */ > struct xfs_inode *dp; /* directory inode to manipulate */ > xfs_fsblock_t *firstblock; /* ptr to firstblock for bmap calls */ > - struct xfs_defer_ops *flist; /* ptr to freelist for bmap_finish */ > + struct xfs_defer_ops *dfops; /* ptr to freelist for bmap_finish */ > struct xfs_trans *trans; /* current trans (changes over time) */ > xfs_extlen_t total; /* total blocks needed, for 1st bmap */ > int whichfork; /* data or attribute fork */ > diff --git a/fs/xfs/libxfs/xfs_dir2.c b/fs/xfs/libxfs/xfs_dir2.c > index 0523100..20a96dd 100644 > --- a/fs/xfs/libxfs/xfs_dir2.c > +++ b/fs/xfs/libxfs/xfs_dir2.c > @@ -260,7 +260,7 @@ xfs_dir_createname( > struct xfs_name *name, > xfs_ino_t inum, /* new entry inode number */ > xfs_fsblock_t *first, /* bmap's firstblock */ > - struct xfs_defer_ops *flist, /* bmap's freeblock list */ > + struct xfs_defer_ops *dfops, /* bmap's freeblock list */ > xfs_extlen_t total) /* bmap's total block count */ > { > struct xfs_da_args *args; > @@ -287,7 +287,7 @@ xfs_dir_createname( > args->inumber = inum; > args->dp = dp; > args->firstblock = first; > - args->flist = flist; > + args->dfops = dfops; > args->total = total; > args->whichfork = XFS_DATA_FORK; > args->trans = tp; > @@ -437,7 +437,7 @@ xfs_dir_removename( > struct xfs_name *name, > xfs_ino_t ino, > xfs_fsblock_t *first, /* bmap's firstblock */ > - struct xfs_defer_ops *flist, /* bmap's freeblock list */ > + struct xfs_defer_ops *dfops, /* bmap's freeblock list */ > xfs_extlen_t total) /* bmap's total block count */ > { > struct xfs_da_args *args; > @@ -459,7 +459,7 @@ xfs_dir_removename( > args->inumber = ino; > args->dp = dp; > args->firstblock = first; > - args->flist = flist; > + args->dfops = dfops; > args->total = total; > args->whichfork = XFS_DATA_FORK; > args->trans = tp; > @@ -499,7 +499,7 @@ xfs_dir_replace( > struct xfs_name *name, /* name of entry to replace */ > xfs_ino_t inum, /* new inode number */ > xfs_fsblock_t *first, /* bmap's firstblock */ > - struct xfs_defer_ops *flist, /* bmap's freeblock list */ > + struct xfs_defer_ops *dfops, /* bmap's freeblock list */ > xfs_extlen_t total) /* bmap's total block count */ > { > struct xfs_da_args *args; > @@ -524,7 +524,7 @@ xfs_dir_replace( > args->inumber = inum; > args->dp = dp; > args->firstblock = first; > - args->flist = flist; > + args->dfops = dfops; > args->total = total; > args->whichfork = XFS_DATA_FORK; > args->trans = tp; > @@ -681,7 +681,7 @@ xfs_dir2_shrink_inode( > > /* Unmap the fsblock(s). */ > error = xfs_bunmapi(tp, dp, da, args->geo->fsbcount, 0, 0, > - args->firstblock, args->flist, &done); > + args->firstblock, args->dfops, &done); > if (error) { > /* > * ENOSPC actually can happen if we're in a removename with no > diff --git a/fs/xfs/libxfs/xfs_dir2.h b/fs/xfs/libxfs/xfs_dir2.h > index c272f1a..becc926 100644 > --- a/fs/xfs/libxfs/xfs_dir2.h > +++ b/fs/xfs/libxfs/xfs_dir2.h > @@ -129,18 +129,18 @@ extern int xfs_dir_init(struct xfs_trans *tp, struct xfs_inode *dp, > extern int xfs_dir_createname(struct xfs_trans *tp, struct xfs_inode *dp, > struct xfs_name *name, xfs_ino_t inum, > xfs_fsblock_t *first, > - struct xfs_defer_ops *flist, xfs_extlen_t tot); > + struct xfs_defer_ops *dfops, xfs_extlen_t tot); > extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp, > struct xfs_name *name, xfs_ino_t *inum, > struct xfs_name *ci_name); > extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp, > struct xfs_name *name, xfs_ino_t ino, > xfs_fsblock_t *first, > - struct xfs_defer_ops *flist, xfs_extlen_t tot); > + struct xfs_defer_ops *dfops, xfs_extlen_t tot); > extern int xfs_dir_replace(struct xfs_trans *tp, struct xfs_inode *dp, > struct xfs_name *name, xfs_ino_t inum, > xfs_fsblock_t *first, > - struct xfs_defer_ops *flist, xfs_extlen_t tot); > + struct xfs_defer_ops *dfops, xfs_extlen_t tot); > extern int xfs_dir_canenter(struct xfs_trans *tp, struct xfs_inode *dp, > struct xfs_name *name); > > diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c > index 972b2ea..f0e1f71 100644 > --- a/fs/xfs/libxfs/xfs_ialloc.c > +++ b/fs/xfs/libxfs/xfs_ialloc.c > @@ -1818,7 +1818,7 @@ xfs_difree_inode_chunk( > struct xfs_mount *mp, > xfs_agnumber_t agno, > struct xfs_inobt_rec_incore *rec, > - struct xfs_defer_ops *flist) > + struct xfs_defer_ops *dfops) > { > xfs_agblock_t sagbno = XFS_AGINO_TO_AGBNO(mp, rec->ir_startino); > int startidx, endidx; > @@ -1829,7 +1829,7 @@ xfs_difree_inode_chunk( > > if (!xfs_inobt_issparse(rec->ir_holemask)) { > /* not sparse, calculate extent info directly */ > - xfs_bmap_add_free(mp, flist, XFS_AGB_TO_FSB(mp, agno, sagbno), > + xfs_bmap_add_free(mp, dfops, XFS_AGB_TO_FSB(mp, agno, sagbno), > mp->m_ialloc_blks); > return; > } > @@ -1873,7 +1873,7 @@ xfs_difree_inode_chunk( > > ASSERT(agbno % mp->m_sb.sb_spino_align == 0); > ASSERT(contigblk % mp->m_sb.sb_spino_align == 0); > - xfs_bmap_add_free(mp, flist, XFS_AGB_TO_FSB(mp, agno, agbno), > + xfs_bmap_add_free(mp, dfops, XFS_AGB_TO_FSB(mp, agno, agbno), > contigblk); > > /* reset range to current bit and carry on... */ > @@ -1890,7 +1890,7 @@ xfs_difree_inobt( > struct xfs_trans *tp, > struct xfs_buf *agbp, > xfs_agino_t agino, > - struct xfs_defer_ops *flist, > + struct xfs_defer_ops *dfops, > struct xfs_icluster *xic, > struct xfs_inobt_rec_incore *orec) > { > @@ -1977,7 +1977,7 @@ xfs_difree_inobt( > goto error0; > } > > - xfs_difree_inode_chunk(mp, agno, &rec, flist); > + xfs_difree_inode_chunk(mp, agno, &rec, dfops); > } else { > xic->deleted = 0; > > @@ -2122,7 +2122,7 @@ int > xfs_difree( > struct xfs_trans *tp, /* transaction pointer */ > xfs_ino_t inode, /* inode to be freed */ > - struct xfs_defer_ops *flist, /* extents to free */ > + struct xfs_defer_ops *dfops, /* extents to free */ > struct xfs_icluster *xic) /* cluster info if deleted */ > { > /* REFERENCED */ > @@ -2174,7 +2174,7 @@ xfs_difree( > /* > * Fix up the inode allocation btree. > */ > - error = xfs_difree_inobt(mp, tp, agbp, agino, flist, xic, &rec); > + error = xfs_difree_inobt(mp, tp, agbp, agino, dfops, xic, &rec); > if (error) > goto error0; > > diff --git a/fs/xfs/libxfs/xfs_ialloc.h b/fs/xfs/libxfs/xfs_ialloc.h > index 2e06b67..0bb8966 100644 > --- a/fs/xfs/libxfs/xfs_ialloc.h > +++ b/fs/xfs/libxfs/xfs_ialloc.h > @@ -95,7 +95,7 @@ int /* error */ > xfs_difree( > struct xfs_trans *tp, /* transaction pointer */ > xfs_ino_t inode, /* inode to be freed */ > - struct xfs_defer_ops *flist, /* extents to free */ > + struct xfs_defer_ops *dfops, /* extents to free */ > struct xfs_icluster *ifree); /* cluster info if deleted */ > > /* > diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c > index 07954e8..3bbe46b 100644 > --- a/fs/xfs/xfs_bmap_util.c > +++ b/fs/xfs/xfs_bmap_util.c > @@ -685,7 +685,7 @@ xfs_bmap_punch_delalloc_range( > xfs_bmbt_irec_t imap; > int nimaps = 1; > xfs_fsblock_t firstblock; > - struct xfs_defer_ops flist; > + struct xfs_defer_ops dfops; > > /* > * Map the range first and check that it is a delalloc extent > @@ -716,18 +716,18 @@ xfs_bmap_punch_delalloc_range( > WARN_ON(imap.br_blockcount == 0); > > /* > - * Note: while we initialise the firstblock/flist pair, they > + * Note: while we initialise the firstblock/dfops pair, they > * should never be used because blocks should never be > * allocated or freed for a delalloc extent and hence we need > * don't cancel or finish them after the xfs_bunmapi() call. > */ > - xfs_defer_init(&flist, &firstblock); > + xfs_defer_init(&dfops, &firstblock); > error = xfs_bunmapi(NULL, ip, start_fsb, 1, 0, 1, &firstblock, > - &flist, &done); > + &dfops, &done); > if (error) > break; > > - ASSERT(!xfs_defer_has_unfinished_work(&flist)); > + ASSERT(!xfs_defer_has_unfinished_work(&dfops)); > next_block: > start_fsb++; > remaining--; > @@ -884,7 +884,7 @@ xfs_alloc_file_space( > int rt; > xfs_trans_t *tp; > xfs_bmbt_irec_t imaps[1], *imapp; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > uint qblocks, resblks, resrtextents; > int error; > > @@ -975,17 +975,17 @@ xfs_alloc_file_space( > > xfs_trans_ijoin(tp, ip, 0); > > - xfs_defer_init(&free_list, &firstfsb); > + xfs_defer_init(&dfops, &firstfsb); > error = xfs_bmapi_write(tp, ip, startoffset_fsb, > allocatesize_fsb, alloc_type, &firstfsb, > - resblks, imapp, &nimaps, &free_list); > + resblks, imapp, &nimaps, &dfops); > if (error) > goto error0; > > /* > * Complete the transaction > */ > - error = xfs_defer_finish(&tp, &free_list, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) > goto error0; > > @@ -1008,7 +1008,7 @@ xfs_alloc_file_space( > return error; > > error0: /* Cancel bmap, unlock inode, unreserve quota blocks, cancel trans */ > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > xfs_trans_unreserve_quota_nblks(tp, ip, (long)qblocks, 0, quota_flag); > > error1: /* Just cancel transaction */ > @@ -1026,7 +1026,7 @@ xfs_unmap_extent( > { > struct xfs_mount *mp = ip->i_mount; > struct xfs_trans *tp; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > xfs_fsblock_t firstfsb; > uint resblks = XFS_DIOSTRAT_SPACE_RES(mp, 0); > int error; > @@ -1045,13 +1045,13 @@ xfs_unmap_extent( > > xfs_trans_ijoin(tp, ip, 0); > > - xfs_defer_init(&free_list, &firstfsb); > + xfs_defer_init(&dfops, &firstfsb); > error = xfs_bunmapi(tp, ip, startoffset_fsb, len_fsb, 0, 2, &firstfsb, > - &free_list, done); > + &dfops, done); > if (error) > goto out_bmap_cancel; > > - error = xfs_defer_finish(&tp, &free_list, ip); > + error = xfs_defer_finish(&tp, &dfops, ip); > if (error) > goto out_bmap_cancel; > > @@ -1061,7 +1061,7 @@ out_unlock: > return error; > > out_bmap_cancel: > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > out_trans_cancel: > xfs_trans_cancel(tp); > goto out_unlock; > @@ -1250,7 +1250,7 @@ xfs_shift_file_space( > struct xfs_mount *mp = ip->i_mount; > struct xfs_trans *tp; > int error; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > xfs_fsblock_t first_block; > xfs_fileoff_t stop_fsb; > xfs_fileoff_t next_fsb; > @@ -1328,19 +1328,19 @@ xfs_shift_file_space( > > xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); > > - xfs_defer_init(&free_list, &first_block); > + xfs_defer_init(&dfops, &first_block); > > /* > * We are using the write transaction in which max 2 bmbt > * updates are allowed > */ > error = xfs_bmap_shift_extents(tp, ip, &next_fsb, shift_fsb, > - &done, stop_fsb, &first_block, &free_list, > + &done, stop_fsb, &first_block, &dfops, > direction, XFS_BMAP_MAX_SHIFT_EXTENTS); > if (error) > goto out_bmap_cancel; > > - error = xfs_defer_finish(&tp, &free_list, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) > goto out_bmap_cancel; > > @@ -1350,7 +1350,7 @@ xfs_shift_file_space( > return error; > > out_bmap_cancel: > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > out_trans_cancel: > xfs_trans_cancel(tp); > return error; > diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c > index 764e1cc..8ca21b8 100644 > --- a/fs/xfs/xfs_dquot.c > +++ b/fs/xfs/xfs_dquot.c > @@ -307,7 +307,7 @@ xfs_qm_dqalloc( > xfs_buf_t **O_bpp) > { > xfs_fsblock_t firstblock; > - struct xfs_defer_ops flist; > + struct xfs_defer_ops dfops; > xfs_bmbt_irec_t map; > int nmaps, error; > xfs_buf_t *bp; > @@ -320,7 +320,7 @@ xfs_qm_dqalloc( > /* > * Initialize the bmap freelist prior to calling bmapi code. > */ > - xfs_defer_init(&flist, &firstblock); > + xfs_defer_init(&dfops, &firstblock); > xfs_ilock(quotip, XFS_ILOCK_EXCL); > /* > * Return if this type of quotas is turned off while we didn't > @@ -336,7 +336,7 @@ xfs_qm_dqalloc( > error = xfs_bmapi_write(tp, quotip, offset_fsb, > XFS_DQUOT_CLUSTER_SIZE_FSB, XFS_BMAPI_METADATA, > &firstblock, XFS_QM_DQALLOC_SPACE_RES(mp), > - &map, &nmaps, &flist); > + &map, &nmaps, &dfops); > if (error) > goto error0; > ASSERT(map.br_blockcount == XFS_DQUOT_CLUSTER_SIZE_FSB); > @@ -382,7 +382,7 @@ xfs_qm_dqalloc( > > xfs_trans_bhold(tp, bp); > > - error = xfs_defer_finish(tpp, &flist, NULL); > + error = xfs_defer_finish(tpp, &dfops, NULL); > if (error) > goto error1; > > @@ -398,7 +398,7 @@ xfs_qm_dqalloc( > return 0; > > error1: > - xfs_defer_cancel(&flist); > + xfs_defer_cancel(&dfops); > error0: > xfs_iunlock(quotip, XFS_ILOCK_EXCL); > > diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c > index 3e990fb..4a33a33 100644 > --- a/fs/xfs/xfs_filestream.c > +++ b/fs/xfs/xfs_filestream.c > @@ -386,7 +386,7 @@ xfs_filestream_new_ag( > } > > flags = (ap->userdata ? XFS_PICK_USERDATA : 0) | > - (ap->flist->dop_low ? XFS_PICK_LOWSPACE : 0); > + (ap->dfops->dop_low ? XFS_PICK_LOWSPACE : 0); > > err = xfs_filestream_pick_ag(pip, startag, agp, flags, minlen); > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index 3ce50da..e08eaea 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -1123,7 +1123,7 @@ xfs_create( > struct xfs_inode *ip = NULL; > struct xfs_trans *tp = NULL; > int error; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > xfs_fsblock_t first_block; > bool unlock_dp_on_error = false; > prid_t prid; > @@ -1183,7 +1183,7 @@ xfs_create( > XFS_IOLOCK_PARENT | XFS_ILOCK_PARENT); > unlock_dp_on_error = true; > > - xfs_defer_init(&free_list, &first_block); > + xfs_defer_init(&dfops, &first_block); > > /* > * Reserve disk quota and the inode. > @@ -1220,7 +1220,7 @@ xfs_create( > unlock_dp_on_error = false; > > error = xfs_dir_createname(tp, dp, name, ip->i_ino, > - &first_block, &free_list, resblks ? > + &first_block, &dfops, resblks ? > resblks - XFS_IALLOC_SPACE_RES(mp) : 0); > if (error) { > ASSERT(error != -ENOSPC); > @@ -1254,7 +1254,7 @@ xfs_create( > */ > xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); > > - error = xfs_defer_finish(&tp, &free_list, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) > goto out_bmap_cancel; > > @@ -1270,7 +1270,7 @@ xfs_create( > return 0; > > out_bmap_cancel: > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > out_trans_cancel: > xfs_trans_cancel(tp); > out_release_inode: > @@ -1402,7 +1402,7 @@ xfs_link( > xfs_mount_t *mp = tdp->i_mount; > xfs_trans_t *tp; > int error; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > xfs_fsblock_t first_block; > int resblks; > > @@ -1453,7 +1453,7 @@ xfs_link( > goto error_return; > } > > - xfs_defer_init(&free_list, &first_block); > + xfs_defer_init(&dfops, &first_block); > > /* > * Handle initial link state of O_TMPFILE inode > @@ -1465,7 +1465,7 @@ xfs_link( > } > > error = xfs_dir_createname(tp, tdp, target_name, sip->i_ino, > - &first_block, &free_list, resblks); > + &first_block, &dfops, resblks); > if (error) > goto error_return; > xfs_trans_ichgtime(tp, tdp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); > @@ -1483,9 +1483,9 @@ xfs_link( > if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) > xfs_trans_set_sync(tp); > > - error = xfs_defer_finish(&tp, &free_list, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) { > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > goto error_return; > } > > @@ -1527,7 +1527,7 @@ xfs_itruncate_extents( > { > struct xfs_mount *mp = ip->i_mount; > struct xfs_trans *tp = *tpp; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > xfs_fsblock_t first_block; > xfs_fileoff_t first_unmap_block; > xfs_fileoff_t last_block; > @@ -1563,12 +1563,12 @@ xfs_itruncate_extents( > ASSERT(first_unmap_block < last_block); > unmap_len = last_block - first_unmap_block + 1; > while (!done) { > - xfs_defer_init(&free_list, &first_block); > + xfs_defer_init(&dfops, &first_block); > error = xfs_bunmapi(tp, ip, > first_unmap_block, unmap_len, > xfs_bmapi_aflag(whichfork), > XFS_ITRUNC_MAX_EXTENTS, > - &first_block, &free_list, > + &first_block, &dfops, > &done); > if (error) > goto out_bmap_cancel; > @@ -1577,7 +1577,7 @@ xfs_itruncate_extents( > * Duplicate the transaction that has the permanent > * reservation and commit the old transaction. > */ > - error = xfs_defer_finish(&tp, &free_list, ip); > + error = xfs_defer_finish(&tp, &dfops, ip); > if (error) > goto out_bmap_cancel; > > @@ -1603,7 +1603,7 @@ out_bmap_cancel: > * the transaction can be properly aborted. We just need to make sure > * we're not holding any resources that we were not when we came in. > */ > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > goto out; > } > > @@ -1744,7 +1744,7 @@ STATIC int > xfs_inactive_ifree( > struct xfs_inode *ip) > { > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > xfs_fsblock_t first_block; > struct xfs_mount *mp = ip->i_mount; > struct xfs_trans *tp; > @@ -1781,8 +1781,8 @@ xfs_inactive_ifree( > xfs_ilock(ip, XFS_ILOCK_EXCL); > xfs_trans_ijoin(tp, ip, 0); > > - xfs_defer_init(&free_list, &first_block); > - error = xfs_ifree(tp, ip, &free_list); > + xfs_defer_init(&dfops, &first_block); > + error = xfs_ifree(tp, ip, &dfops); > if (error) { > /* > * If we fail to free the inode, shut down. The cancel > @@ -1808,11 +1808,11 @@ xfs_inactive_ifree( > * Just ignore errors at this point. There is nothing we can do except > * to try to keep going. Make sure it's not a silent error. > */ > - error = xfs_defer_finish(&tp, &free_list, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) { > xfs_notice(mp, "%s: xfs_defer_finish returned error %d", > __func__, error); > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > } > error = xfs_trans_commit(tp); > if (error) > @@ -2368,7 +2368,7 @@ int > xfs_ifree( > xfs_trans_t *tp, > xfs_inode_t *ip, > - struct xfs_defer_ops *flist) > + struct xfs_defer_ops *dfops) > { > int error; > struct xfs_icluster xic = { 0 }; > @@ -2387,7 +2387,7 @@ xfs_ifree( > if (error) > return error; > > - error = xfs_difree(tp, ip->i_ino, flist, &xic); > + error = xfs_difree(tp, ip->i_ino, dfops, &xic); > if (error) > return error; > > @@ -2490,7 +2490,7 @@ xfs_remove( > xfs_trans_t *tp = NULL; > int is_dir = S_ISDIR(VFS_I(ip)->i_mode); > int error = 0; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > xfs_fsblock_t first_block; > uint resblks; > > @@ -2572,9 +2572,9 @@ xfs_remove( > if (error) > goto out_trans_cancel; > > - xfs_defer_init(&free_list, &first_block); > + xfs_defer_init(&dfops, &first_block); > error = xfs_dir_removename(tp, dp, name, ip->i_ino, > - &first_block, &free_list, resblks); > + &first_block, &dfops, resblks); > if (error) { > ASSERT(error != -ENOENT); > goto out_bmap_cancel; > @@ -2588,7 +2588,7 @@ xfs_remove( > if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) > xfs_trans_set_sync(tp); > > - error = xfs_defer_finish(&tp, &free_list, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) > goto out_bmap_cancel; > > @@ -2602,7 +2602,7 @@ xfs_remove( > return 0; > > out_bmap_cancel: > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > out_trans_cancel: > xfs_trans_cancel(tp); > std_return: > @@ -2663,7 +2663,7 @@ xfs_sort_for_rename( > static int > xfs_finish_rename( > struct xfs_trans *tp, > - struct xfs_defer_ops *free_list) > + struct xfs_defer_ops *dfops) > { > int error; > > @@ -2674,9 +2674,9 @@ xfs_finish_rename( > if (tp->t_mountp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) > xfs_trans_set_sync(tp); > > - error = xfs_defer_finish(&tp, free_list, NULL); > + error = xfs_defer_finish(&tp, dfops, NULL); > if (error) { > - xfs_defer_cancel(free_list); > + xfs_defer_cancel(dfops); > xfs_trans_cancel(tp); > return error; > } > @@ -2698,7 +2698,7 @@ xfs_cross_rename( > struct xfs_inode *dp2, > struct xfs_name *name2, > struct xfs_inode *ip2, > - struct xfs_defer_ops *free_list, > + struct xfs_defer_ops *dfops, > xfs_fsblock_t *first_block, > int spaceres) > { > @@ -2710,14 +2710,14 @@ xfs_cross_rename( > /* Swap inode number for dirent in first parent */ > error = xfs_dir_replace(tp, dp1, name1, > ip2->i_ino, > - first_block, free_list, spaceres); > + first_block, dfops, spaceres); > if (error) > goto out_trans_abort; > > /* Swap inode number for dirent in second parent */ > error = xfs_dir_replace(tp, dp2, name2, > ip1->i_ino, > - first_block, free_list, spaceres); > + first_block, dfops, spaceres); > if (error) > goto out_trans_abort; > > @@ -2732,7 +2732,7 @@ xfs_cross_rename( > if (S_ISDIR(VFS_I(ip2)->i_mode)) { > error = xfs_dir_replace(tp, ip2, &xfs_name_dotdot, > dp1->i_ino, first_block, > - free_list, spaceres); > + dfops, spaceres); > if (error) > goto out_trans_abort; > > @@ -2759,7 +2759,7 @@ xfs_cross_rename( > if (S_ISDIR(VFS_I(ip1)->i_mode)) { > error = xfs_dir_replace(tp, ip1, &xfs_name_dotdot, > dp2->i_ino, first_block, > - free_list, spaceres); > + dfops, spaceres); > if (error) > goto out_trans_abort; > > @@ -2798,10 +2798,10 @@ xfs_cross_rename( > } > xfs_trans_ichgtime(tp, dp1, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); > xfs_trans_log_inode(tp, dp1, XFS_ILOG_CORE); > - return xfs_finish_rename(tp, free_list); > + return xfs_finish_rename(tp, dfops); > > out_trans_abort: > - xfs_defer_cancel(free_list); > + xfs_defer_cancel(dfops); > xfs_trans_cancel(tp); > return error; > } > @@ -2856,7 +2856,7 @@ xfs_rename( > { > struct xfs_mount *mp = src_dp->i_mount; > struct xfs_trans *tp; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > xfs_fsblock_t first_block; > struct xfs_inode *wip = NULL; /* whiteout inode */ > struct xfs_inode *inodes[__XFS_SORT_INODES]; > @@ -2945,13 +2945,13 @@ xfs_rename( > goto out_trans_cancel; > } > > - xfs_defer_init(&free_list, &first_block); > + xfs_defer_init(&dfops, &first_block); > > /* RENAME_EXCHANGE is unique from here on. */ > if (flags & RENAME_EXCHANGE) > return xfs_cross_rename(tp, src_dp, src_name, src_ip, > target_dp, target_name, target_ip, > - &free_list, &first_block, spaceres); > + &dfops, &first_block, spaceres); > > /* > * Set up the target. > @@ -2973,7 +2973,7 @@ xfs_rename( > */ > error = xfs_dir_createname(tp, target_dp, target_name, > src_ip->i_ino, &first_block, > - &free_list, spaceres); > + &dfops, spaceres); > if (error) > goto out_bmap_cancel; > > @@ -3013,7 +3013,7 @@ xfs_rename( > */ > error = xfs_dir_replace(tp, target_dp, target_name, > src_ip->i_ino, > - &first_block, &free_list, spaceres); > + &first_block, &dfops, spaceres); > if (error) > goto out_bmap_cancel; > > @@ -3048,7 +3048,7 @@ xfs_rename( > */ > error = xfs_dir_replace(tp, src_ip, &xfs_name_dotdot, > target_dp->i_ino, > - &first_block, &free_list, spaceres); > + &first_block, &dfops, spaceres); > ASSERT(error != -EEXIST); > if (error) > goto out_bmap_cancel; > @@ -3087,10 +3087,10 @@ xfs_rename( > */ > if (wip) { > error = xfs_dir_replace(tp, src_dp, src_name, wip->i_ino, > - &first_block, &free_list, spaceres); > + &first_block, &dfops, spaceres); > } else > error = xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino, > - &first_block, &free_list, spaceres); > + &first_block, &dfops, spaceres); > if (error) > goto out_bmap_cancel; > > @@ -3125,13 +3125,13 @@ xfs_rename( > if (new_parent) > xfs_trans_log_inode(tp, target_dp, XFS_ILOG_CORE); > > - error = xfs_finish_rename(tp, &free_list); > + error = xfs_finish_rename(tp, &dfops); > if (wip) > IRELE(wip); > return error; > > out_bmap_cancel: > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > out_trans_cancel: > xfs_trans_cancel(tp); > out_release_wip: > diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c > index dc93c20..2114d53 100644 > --- a/fs/xfs/xfs_iomap.c > +++ b/fs/xfs/xfs_iomap.c > @@ -129,7 +129,7 @@ xfs_iomap_write_direct( > int quota_flag; > int rt; > xfs_trans_t *tp; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > uint qblocks, resblks, resrtextents; > int error; > int lockmode; > @@ -232,18 +232,18 @@ xfs_iomap_write_direct( > * From this point onwards we overwrite the imap pointer that the > * caller gave to us. > */ > - xfs_defer_init(&free_list, &firstfsb); > + xfs_defer_init(&dfops, &firstfsb); > nimaps = 1; > error = xfs_bmapi_write(tp, ip, offset_fsb, count_fsb, > bmapi_flags, &firstfsb, resblks, imap, > - &nimaps, &free_list); > + &nimaps, &dfops); > if (error) > goto out_bmap_cancel; > > /* > * Complete the transaction > */ > - error = xfs_defer_finish(&tp, &free_list, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) > goto out_bmap_cancel; > > @@ -267,7 +267,7 @@ out_unlock: > return error; > > out_bmap_cancel: > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > xfs_trans_unreserve_quota_nblks(tp, ip, (long)qblocks, 0, quota_flag); > out_trans_cancel: > xfs_trans_cancel(tp); > @@ -686,7 +686,7 @@ xfs_iomap_write_allocate( > xfs_fileoff_t offset_fsb, last_block; > xfs_fileoff_t end_fsb, map_start_fsb; > xfs_fsblock_t first_block; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > xfs_filblks_t count_fsb; > xfs_trans_t *tp; > int nimaps; > @@ -728,7 +728,7 @@ xfs_iomap_write_allocate( > xfs_ilock(ip, XFS_ILOCK_EXCL); > xfs_trans_ijoin(tp, ip, 0); > > - xfs_defer_init(&free_list, &first_block); > + xfs_defer_init(&dfops, &first_block); > > /* > * it is possible that the extents have changed since > @@ -784,11 +784,11 @@ xfs_iomap_write_allocate( > error = xfs_bmapi_write(tp, ip, map_start_fsb, > count_fsb, 0, &first_block, > nres, imap, &nimaps, > - &free_list); > + &dfops); > if (error) > goto trans_cancel; > > - error = xfs_defer_finish(&tp, &free_list, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) > goto trans_cancel; > > @@ -822,7 +822,7 @@ xfs_iomap_write_allocate( > } > > trans_cancel: > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > xfs_trans_cancel(tp); > error0: > xfs_iunlock(ip, XFS_ILOCK_EXCL); > @@ -843,7 +843,7 @@ xfs_iomap_write_unwritten( > int nimaps; > xfs_trans_t *tp; > xfs_bmbt_irec_t imap; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > xfs_fsize_t i_size; > uint resblks; > int error; > @@ -887,11 +887,11 @@ xfs_iomap_write_unwritten( > /* > * Modify the unwritten extent state of the buffer. > */ > - xfs_defer_init(&free_list, &firstfsb); > + xfs_defer_init(&dfops, &firstfsb); > nimaps = 1; > error = xfs_bmapi_write(tp, ip, offset_fsb, count_fsb, > XFS_BMAPI_CONVERT, &firstfsb, resblks, > - &imap, &nimaps, &free_list); > + &imap, &nimaps, &dfops); > if (error) > goto error_on_bmapi_transaction; > > @@ -910,7 +910,7 @@ xfs_iomap_write_unwritten( > xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); > } > > - error = xfs_defer_finish(&tp, &free_list, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) > goto error_on_bmapi_transaction; > > @@ -937,7 +937,7 @@ xfs_iomap_write_unwritten( > return 0; > > error_on_bmapi_transaction: > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > xfs_trans_cancel(tp); > xfs_iunlock(ip, XFS_ILOCK_EXCL); > return error; > diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c > index c761a6a..802bcc3 100644 > --- a/fs/xfs/xfs_rtalloc.c > +++ b/fs/xfs/xfs_rtalloc.c > @@ -770,7 +770,7 @@ xfs_growfs_rt_alloc( > xfs_daddr_t d; /* disk block address */ > int error; /* error return value */ > xfs_fsblock_t firstblock;/* first block allocated in xaction */ > - struct xfs_defer_ops flist; /* list of freed blocks */ > + struct xfs_defer_ops dfops; /* list of freed blocks */ > xfs_fsblock_t fsbno; /* filesystem block for bno */ > struct xfs_bmbt_irec map; /* block map output */ > int nmap; /* number of block maps */ > @@ -795,14 +795,14 @@ xfs_growfs_rt_alloc( > xfs_ilock(ip, XFS_ILOCK_EXCL); > xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); > > - xfs_defer_init(&flist, &firstblock); > + xfs_defer_init(&dfops, &firstblock); > /* > * Allocate blocks to the bitmap file. > */ > nmap = 1; > error = xfs_bmapi_write(tp, ip, oblocks, nblocks - oblocks, > XFS_BMAPI_METADATA, &firstblock, > - resblks, &map, &nmap, &flist); > + resblks, &map, &nmap, &dfops); > if (!error && nmap < 1) > error = -ENOSPC; > if (error) > @@ -810,7 +810,7 @@ xfs_growfs_rt_alloc( > /* > * Free any blocks freed up in the transaction, then commit. > */ > - error = xfs_defer_finish(&tp, &flist, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) > goto out_bmap_cancel; > error = xfs_trans_commit(tp); > @@ -863,7 +863,7 @@ xfs_growfs_rt_alloc( > return 0; > > out_bmap_cancel: > - xfs_defer_cancel(&flist); > + xfs_defer_cancel(&dfops); > out_trans_cancel: > xfs_trans_cancel(tp); > return error; > diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c > index 3b005ec..58142ae 100644 > --- a/fs/xfs/xfs_symlink.c > +++ b/fs/xfs/xfs_symlink.c > @@ -173,7 +173,7 @@ xfs_symlink( > struct xfs_inode *ip = NULL; > int error = 0; > int pathlen; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > xfs_fsblock_t first_block; > bool unlock_dp_on_error = false; > xfs_fileoff_t first_fsb; > @@ -270,7 +270,7 @@ xfs_symlink( > * Initialize the bmap freelist prior to calling either > * bmapi or the directory create code. > */ > - xfs_defer_init(&free_list, &first_block); > + xfs_defer_init(&dfops, &first_block); > > /* > * Allocate an inode for the symlink. > @@ -314,7 +314,7 @@ xfs_symlink( > > error = xfs_bmapi_write(tp, ip, first_fsb, fs_blocks, > XFS_BMAPI_METADATA, &first_block, resblks, > - mval, &nmaps, &free_list); > + mval, &nmaps, &dfops); > if (error) > goto out_bmap_cancel; > > @@ -362,7 +362,7 @@ xfs_symlink( > * Create the directory entry for the symlink. > */ > error = xfs_dir_createname(tp, dp, link_name, ip->i_ino, > - &first_block, &free_list, resblks); > + &first_block, &dfops, resblks); > if (error) > goto out_bmap_cancel; > xfs_trans_ichgtime(tp, dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); > @@ -377,7 +377,7 @@ xfs_symlink( > xfs_trans_set_sync(tp); > } > > - error = xfs_defer_finish(&tp, &free_list, NULL); > + error = xfs_defer_finish(&tp, &dfops, NULL); > if (error) > goto out_bmap_cancel; > > @@ -393,7 +393,7 @@ xfs_symlink( > return 0; > > out_bmap_cancel: > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > out_trans_cancel: > xfs_trans_cancel(tp); > out_release_inode: > @@ -427,7 +427,7 @@ xfs_inactive_symlink_rmt( > int done; > int error; > xfs_fsblock_t first_block; > - struct xfs_defer_ops free_list; > + struct xfs_defer_ops dfops; > int i; > xfs_mount_t *mp; > xfs_bmbt_irec_t mval[XFS_SYMLINK_MAPS]; > @@ -466,7 +466,7 @@ xfs_inactive_symlink_rmt( > * Find the block(s) so we can inval and unmap them. > */ > done = 0; > - xfs_defer_init(&free_list, &first_block); > + xfs_defer_init(&dfops, &first_block); > nmaps = ARRAY_SIZE(mval); > error = xfs_bmapi_read(ip, 0, xfs_symlink_blocks(mp, size), > mval, &nmaps, 0); > @@ -486,17 +486,17 @@ xfs_inactive_symlink_rmt( > xfs_trans_binval(tp, bp); > } > /* > - * Unmap the dead block(s) to the free_list. > + * Unmap the dead block(s) to the dfops. > */ > error = xfs_bunmapi(tp, ip, 0, size, 0, nmaps, > - &first_block, &free_list, &done); > + &first_block, &dfops, &done); > if (error) > goto error_bmap_cancel; > ASSERT(done); > /* > * Commit the first transaction. This logs the EFI and the inode. > */ > - error = xfs_defer_finish(&tp, &free_list, ip); > + error = xfs_defer_finish(&tp, &dfops, ip); > if (error) > goto error_bmap_cancel; > /* > @@ -526,7 +526,7 @@ xfs_inactive_symlink_rmt( > return 0; > > error_bmap_cancel: > - xfs_defer_cancel(&free_list); > + xfs_defer_cancel(&dfops); > error_trans_cancel: > xfs_trans_cancel(tp); > error_unlock: > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From lista.unx@gmail.com Tue Aug 2 12:34:39 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.9 required=5.0 tests=FREEMAIL_FROM,STOX_REPLY_TYPE, T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 13A437CA4 for ; Tue, 2 Aug 2016 12:34:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id C179A304053 for ; Tue, 2 Aug 2016 10:34:38 -0700 (PDT) X-ASG-Debug-ID: 1470159275-0bf57b369c353bb0001-NocioJ Received: from mail-wm0-f54.google.com (mail-wm0-f54.google.com [74.125.82.54]) by cuda.sgi.com with ESMTP id wNeeB5VjV7zYpBtA (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 02 Aug 2016 10:34:36 -0700 (PDT) X-Barracuda-Envelope-From: lista.unx@gmail.com X-Barracuda-Effective-Source-IP: mail-wm0-f54.google.com[74.125.82.54] X-Barracuda-Apparent-Source-IP: 74.125.82.54 Received: by mail-wm0-f54.google.com with SMTP id f65so418107905wmi.0 for ; Tue, 02 Aug 2016 10:34:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:from:to:references:subject:date:mime-version :content-transfer-encoding; bh=7fbDH5Ov2giBrL0r+FpMRYN6aPyLN9Q7HSKSp5ejNII=; b=T+ObDyc4v6SFCaGbdHIP23yRqf1cbQFkcvZzIZ3BZdC/1/AKHcHwgFYnJU2oNa64vK PPy4bwOsdv4St7/o0pxfqXUi7e+K2orx9mFNa42W2H7yMcpRBUU+WPCRb1k4CI5o0Ih4 /Xnig9eMsBxhMbrvpBkoQ0HhgWtgRh69429LHwY3jYDaLifD1PF76LV8k5b4v7MK0k1O pOxwZ9E9rNYIIgWsldqtwOWFvSA5SKMI55qe1fSta2QcjNp4wwf0J3rvf0taQRZNEPnI RqdWcZRgWVpONOO5By6slCli3OTBn61KgHqZ+IUDcLn/7gFYNJbemuy8ZFDyJQlwiyoK OgAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:from:to:references:subject:date :mime-version:content-transfer-encoding; bh=7fbDH5Ov2giBrL0r+FpMRYN6aPyLN9Q7HSKSp5ejNII=; b=b5J0QZ7eKHCbb4SnOIkALwbPTroyV0nxgvM1pUapRUkXwdummLI3Wmwimfi+7lFcO6 GnoRvG/hDrlvR7ol/sM0fq0QvG0rBa3vQF/J38QXP35k1gqYNXiEd4aYduIQIVUJaoj4 L0mwprK+rt2T75JAmvDkjVLCT/3+bLHGkoiXZNALwGDvGl2HMtSZLleukQvyFU0c1Puw tgAfYE41i8ceriKjep5o/ISqppv4UElNm/8K8RG+lRuxAuVcD2VQuL9T48SEcxLXvXM0 slwfEnIBM7wFkGvWxi+JmNGTmZAfx/lMTqSN+R381X5jvju/noS2KWXqU1MSAh3PXoM6 x39Q== X-Gm-Message-State: AEkoouuqd6d0F9skIoZSl+x0zJBWT2EU0XRcnax440cNxSQcdhYmd3g0MKVF5f3ATJBPOQ== X-Received: by 10.28.5.9 with SMTP id 9mr19789546wmf.74.1470159275536; Tue, 02 Aug 2016 10:34:35 -0700 (PDT) Received: from dinulap (dev155.demoshop.ro. [5.2.129.155]) by smtp.gmail.com with ESMTPSA id k186sm23015041wmd.13.2016.08.02.10.34.34 (version=TLS1 cipher=DES-CBC3-SHA bits=112/168); Tue, 02 Aug 2016 10:34:34 -0700 (PDT) Message-ID: <299CA9DAF3C04126BA9722C2DC7F5730@dinulap> From: "Lista Unx" To: "Carlos E. R." , "XFS mailing list" References: <4278AB9734C1445A8E48635B155149F8@dinulap><20160729233524.GD16044@dastard><57CF7681619F42CCB4C0CF589E9686E5@dinulap> Subject: Re: partition 100% full No space left on device. looks like xfsiscorrupted or a bug Date: Tue, 2 Aug 2016 20:34:35 +0300 X-ASG-Orig-Subj: Re: partition 100% full No space left on device. looks like xfsiscorrupted or a bug MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="UTF-8"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5931 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157 X-Barracuda-Connect: mail-wm0-f54.google.com[74.125.82.54] X-Barracuda-Start-Time: 1470159276 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 910 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED, STOX_REPLY_TYPE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31697 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 STOX_REPLY_TYPE STOX_REPLY_TYPE 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature ----- Original Message ----- From: "Carlos E. R." To: "XFS mailing list" Sent: Monday, August 01, 2016 3:23 PM Subject: Re: partition 100% full No space left on device. looks like xfsiscorrupted or a bug > Dave refers to a unix/linux "feature". Files can be deleted, but if > they are in use at the time, the contents are not deleted. Disk shows an > ammount of free space that does not match the total - used space. > It haS been checked! See below a snip from my first post. #lsof -nP |grep -i delete|wc -l 0 #find /proc/*/fd -ls | grep -i dele|wc -l 0 > However, a reboot clears this situation, and you did say in the original > post you had rebooted the system. Yes, tried also reboot which does not solve the problem. Its obvious that till not run xfs_repair, we can't conclude more. This will happen next days ... From lista.unx@gmail.com Tue Aug 2 12:34:44 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.9 required=5.0 tests=FREEMAIL_FROM,STOX_REPLY_TYPE, 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 8C28F7CB1 for ; Tue, 2 Aug 2016 12:34:44 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5EE458F8037 for ; Tue, 2 Aug 2016 10:34:44 -0700 (PDT) X-ASG-Debug-ID: 1470159281-0bf57c13682f48f0001-NocioJ Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by cuda.sgi.com with ESMTP id 8gfIXOriptECpeTX (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 02 Aug 2016 10:34:42 -0700 (PDT) X-Barracuda-Envelope-From: lista.unx@gmail.com X-Barracuda-Effective-Source-IP: mail-wm0-f47.google.com[74.125.82.47] X-Barracuda-Apparent-Source-IP: 74.125.82.47 Received: by mail-wm0-f47.google.com with SMTP id o80so300991565wme.1 for ; Tue, 02 Aug 2016 10:34:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:from:to:references:subject:date:mime-version :content-transfer-encoding; bh=7fbDH5Ov2giBrL0r+FpMRYN6aPyLN9Q7HSKSp5ejNII=; b=puv4JJUw11i/fSV8BghlQfSF1y1Jh6++DZsmzHXnlkKn6tVKRAndkCOkW+fRMfTtiX zE6KlGoA73e6p4xXSDZEi8pjh9f/e8sUg6Vk3pfFsRJwxFTLLo9RKl8RK2gvYEawoOwe anEqhA0LDEeU3SVldLW3//DjJDHmYWX7Fu2v1i29c2YsbCBTWzBYWrCh8IKvthu+R95c hKPONIaNZNECvNw3XwXilug4NRIGI1wxTzPAWFnpiaqHoubTHUn32qv9yDPH15fZHgIM JKVfwZKRGQV7qcg2vvx8JTeO5q47kvDjR7gpcvSX2rogoQ2ZQc6AA/D8q2r5+3/o5zzp UGzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:from:to:references:subject:date :mime-version:content-transfer-encoding; bh=7fbDH5Ov2giBrL0r+FpMRYN6aPyLN9Q7HSKSp5ejNII=; b=LPN14OtbdQQ2YqEShH7TLfYWIk7w+EBdd7Ph1GwcP8X1/+wKIIo3Lb0bChRIQeQaM/ RI9iXyuR+3sfYQxiC+1cqvxbK6054RNGp/W+cLnPrbGOQ6hJ4jxtSkUW6htjGAVk8kOI zByluTZ1gJ0sGY4v3agcN053V+9kqIFAh2H4s8AR+D8FSKH0Zg3k5j3dGIGSK051NnOI S5hKaREJUXsEoaBEz3gDwEvbn4ZcVjangG8SIh6DF60u/PT+c6iDrLk/LXjJnzwKF0qR sjKRnH3aHwgwocTZjCtDKPAowGfrGSXfCj6XUU9owT3JckpZU8EJBLq92/vEbS5QzSwc 6dBA== X-Gm-Message-State: AEkoouvELGx5I/ClGOWnC3FidiyQj3Jy2KBSQfeckfhvJALO1zKxrR9m+TuPUPntXGIwlg== X-Received: by 10.194.79.161 with SMTP id k1mr4669203wjx.119.1470159281404; Tue, 02 Aug 2016 10:34:41 -0700 (PDT) Received: from dinulap (dev155.demoshop.ro. [5.2.129.155]) by smtp.gmail.com with ESMTPSA id u125sm23023226wmg.22.2016.08.02.10.34.40 (version=TLS1 cipher=DES-CBC3-SHA bits=112/168); Tue, 02 Aug 2016 10:34:40 -0700 (PDT) Message-ID: From: "Lista Unx" To: "Carlos E. R." , "XFS mailing list" References: <4278AB9734C1445A8E48635B155149F8@dinulap><20160729233524.GD16044@dastard><57CF7681619F42CCB4C0CF589E9686E5@dinulap> Subject: Re: partition 100% full No space left on device. looks like xfsiscorrupted or a bug Date: Tue, 2 Aug 2016 20:34:41 +0300 X-ASG-Orig-Subj: Re: partition 100% full No space left on device. looks like xfsiscorrupted or a bug MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="UTF-8"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5931 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157 X-Barracuda-Connect: mail-wm0-f47.google.com[74.125.82.47] X-Barracuda-Start-Time: 1470159282 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 910 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED, STOX_REPLY_TYPE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31697 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 STOX_REPLY_TYPE STOX_REPLY_TYPE 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature ----- Original Message ----- From: "Carlos E. R." To: "XFS mailing list" Sent: Monday, August 01, 2016 3:23 PM Subject: Re: partition 100% full No space left on device. looks like xfsiscorrupted or a bug > Dave refers to a unix/linux "feature". Files can be deleted, but if > they are in use at the time, the contents are not deleted. Disk shows an > ammount of free space that does not match the total - used space. > It haS been checked! See below a snip from my first post. #lsof -nP |grep -i delete|wc -l 0 #find /proc/*/fd -ls | grep -i dele|wc -l 0 > However, a reboot clears this situation, and you did say in the original > post you had rebooted the system. Yes, tried also reboot which does not solve the problem. Its obvious that till not run xfs_repair, we can't conclude more. This will happen next days ... From lista.unx@gmail.com Tue Aug 2 12:58:06 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.9 required=5.0 tests=FREEMAIL_FROM,STOX_REPLY_TYPE, 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 59CF77CA4 for ; Tue, 2 Aug 2016 12:58:06 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id BC246AC004 for ; Tue, 2 Aug 2016 10:58:05 -0700 (PDT) X-ASG-Debug-ID: 1470160682-0bf57c13692f5320001-NocioJ Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com [74.125.82.50]) by cuda.sgi.com with ESMTP id p6PdW3osvxVEu0yj (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 02 Aug 2016 10:58:03 -0700 (PDT) X-Barracuda-Envelope-From: lista.unx@gmail.com X-Barracuda-Effective-Source-IP: mail-wm0-f50.google.com[74.125.82.50] X-Barracuda-Apparent-Source-IP: 74.125.82.50 Received: by mail-wm0-f50.google.com with SMTP id f65so418787928wmi.0 for ; Tue, 02 Aug 2016 10:58:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:from:to:references:subject:date:mime-version :content-transfer-encoding; bh=CTAHw1WXKCcIioMs53TOe7nt+Qqwj/cwXksZnSyEOiI=; b=j36UN3ZVwRQCATYgfW9D1GRTAoEZ8WrxLTvlP8aPSwaS4HFMB8xVOfaIUwzebzCIfi Fy8VAQ/cY/ZgDR20UJE3TZiMRwxySWnjDgOy1dYYZlCdU4YeS6eXHuHO0xMACFOoaJAO k9DlQZGtkVIbI2DGBhB/yRrG0oPNy5yW5xwTT2l+VkLfXCKund94zBDrwbOHjB+iBVDr t3/W4eemTp9b5V/yE2+IL+Ckj3gCG8KkVKeJ2woMXSVj4k08rdqrbfUjUSavuwFYH7/E Y0DpsT42FHMcFLXdMiHc+9JeiIafp7ngQgbr16uD6MvGVvsouG3bratEqLZbQDDePS5v awIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:from:to:references:subject:date :mime-version:content-transfer-encoding; bh=CTAHw1WXKCcIioMs53TOe7nt+Qqwj/cwXksZnSyEOiI=; b=fN6SaN/mM0y7vq6Tmjn79KUv0p9sCfKV5Nou6NeiJokwFNOcU6Oupkqc6FpV3CYzkb q6x8oO+NLTX1xqLl8fhSHk/tPJZKOeTFHSi6kd4TApnjKJJbHWfe1d2+WGbGqKDmYgoY U6bg9qUTdls1aZM4uEUkf3xE9KsHHv2FQEddNtFWE2f/yPZglNVYaWa8Ht7GnYJl262E Vdu5p9sipEGZTCewhIOKbVqk6z3D/m58M0WLgMmRMqy7pGKAGd/ol0U7UX+Hiy1pjQHu 0EnH4tN5ZgrpqdhgH0fwiSvdiWSXrUew4UaMokjbSgrELk99Ma7/eeW9cLdV70vIjxdi wX1Q== X-Gm-Message-State: AEkooutCh/IZzFqdGMyQFV4jf4YO1/J0zEPFw6dT60Ev4RrTyn+87/DF5A+lDXNI/YgABA== X-Received: by 10.28.38.196 with SMTP id m187mr19611757wmm.81.1470160681987; Tue, 02 Aug 2016 10:58:01 -0700 (PDT) Received: from dinulap (dev155.demoshop.ro. [5.2.129.155]) by smtp.gmail.com with ESMTPSA id c10sm3723113wjk.22.2016.08.02.10.58.00 (version=TLS1 cipher=DES-CBC3-SHA bits=112/168); Tue, 02 Aug 2016 10:58:01 -0700 (PDT) Message-ID: <5B47A77EB08F49A9B0843A6215A24C64@dinulap> From: "Lista Unx" To: "Chris Murphy" , References: <4278AB9734C1445A8E48635B155149F8@dinulap><20160729233524.GD16044@dastard><57CF7681619F42CCB4C0CF589E9686E5@dinulap> Subject: Re: partition 100% full No space left on device. looks like xfsiscorrupted or a bug Date: Tue, 2 Aug 2016 20:58:01 +0300 X-ASG-Orig-Subj: Re: partition 100% full No space left on device. looks like xfsiscorrupted or a bug MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5931 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157 X-Barracuda-Connect: mail-wm0-f50.google.com[74.125.82.50] X-Barracuda-Start-Time: 1470160683 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1243 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED, STOX_REPLY_TYPE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31698 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 STOX_REPLY_TYPE STOX_REPLY_TYPE 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature ----- Original Message ----- From: "Chris Murphy" To: Sent: Monday, August 01, 2016 7:51 PM Subject: Re: partition 100% full No space left on device. looks like xfsiscorrupted or a bug > On Mon, Aug 1, 2016 at 6:00 AM, Lista Unx wrote: > >> Yes, I've created a new gmail account especially to be able to post to >> this >> mailing list which is filtering very seriously legit messages comming >> from >> legit users, just because they are comming from yahoo accounts (servers) >> ... > > It's a Yahoo policy. It's completely reasonable for lists to reject > yahoo.com emails, but ideally it'd reject them at signup time. > > https://help.yahoo.com/kb/SLN24050.html > https://help.yahoo.com/kb/mail/SLN24016.html?impressions=true > http://www.pcworld.com/article/2141120/yahoo-email-antispoofing-policy-breaks-mailing-lists.html > > Ok, I understand. In this case: 1. Is a good idea to not allow those using yahoo accounts to subscribe to this list (with a clear message regarding why you are doing it) and 2. Reject all messages comming from users which does not have valid membership on this list (for sure, you will reduce spam) From bfoster@redhat.com Tue Aug 2 13:47:41 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 C54067CA4 for ; Tue, 2 Aug 2016 13:47:41 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9741A304039 for ; Tue, 2 Aug 2016 11:47:38 -0700 (PDT) X-ASG-Debug-ID: 1470163656-0bf57c13672f6990001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Shfqvs9EJQuMe06u (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 11:47:37 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 37736C03070B; Tue, 2 Aug 2016 18:47:36 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72IlZhw000862; Tue, 2 Aug 2016 14:47:35 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id BB869120BDC; Tue, 2 Aug 2016 14:47:34 -0400 (EDT) Date: Tue, 2 Aug 2016 14:47:34 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 18/47] xfs: refactor redo intent item processing Message-ID: <20160802184734.GA58152@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 18/47] xfs: refactor redo intent item processing References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907708421.25461.405239727630066080.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907708421.25461.405239727630066080.stgit@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 02 Aug 2016 18:47:36 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470163657 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 6043 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 20, 2016 at 09:58:04PM -0700, Darrick J. Wong wrote: > Refactor the EFI intent item recovery (and cancellation) functions > into a general function that scans the AIL and an intent item type > specific handler. Move the function that recovers a single EFI item > into the extent free item code. We'll want the generalized function > when we start wiring up more redo item types. > > Signed-off-by: Darrick J. Wong > --- > fs/xfs/xfs_extfree_item.c | 65 ++++++++++++++++ > fs/xfs/xfs_extfree_item.h | 3 + > fs/xfs/xfs_log_recover.c | 182 +++++++++++++++++++++------------------------ > 3 files changed, 151 insertions(+), 99 deletions(-) > > ... > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index 080b54b..af608aa 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -24,7 +24,6 @@ > #include "xfs_bit.h" > #include "xfs_sb.h" > #include "xfs_mount.h" > -#include "xfs_defer.h" > #include "xfs_da_format.h" > #include "xfs_da_btree.h" > #include "xfs_inode.h" > @@ -4165,126 +4164,112 @@ xlog_recover_process_data( ... > STATIC int > -xlog_recover_process_efis( > +xlog_recover_process_intents( > struct xlog *log) > { > struct xfs_log_item *lip; > - struct xfs_efi_log_item *efip; > int error = 0; > struct xfs_ail_cursor cur; > struct xfs_ail *ailp; > + xfs_lsn_t last_lsn; > > ailp = log->l_ailp; > spin_lock(&ailp->xa_lock); > lip = xfs_trans_ail_cursor_first(ailp, &cur, 0); > + last_lsn = xlog_assign_lsn(log->l_curr_cycle, log->l_curr_block); > while (lip != NULL) { > /* > - * We're done when we see something other than an EFI. > - * There should be no EFIs left in the AIL now. > + * We're done when we see something other than an intent. > + * There should be no intents left in the AIL now. > */ > - if (lip->li_type != XFS_LI_EFI) { > + if (!xlog_item_is_intent(lip)) { > #ifdef DEBUG > for (; lip; lip = xfs_trans_ail_cursor_next(ailp, &cur)) > - ASSERT(lip->li_type != XFS_LI_EFI); > + ASSERT(!xlog_item_is_intent(lip)); > #endif > break; > } > > /* > - * Skip EFIs that we've already processed. > + * We should never see a redo item with a LSN higher than > + * the last transaction we found in the log at the start > + * of recovery. > */ > - efip = container_of(lip, struct xfs_efi_log_item, efi_item); > - if (test_bit(XFS_EFI_RECOVERED, &efip->efi_flags)) { > - lip = xfs_trans_ail_cursor_next(ailp, &cur); > - continue; > - } > + ASSERT(XFS_LSN_CMP(last_lsn, lip->li_lsn) >= 0); > > - spin_unlock(&ailp->xa_lock); > - error = xlog_recover_process_efi(log->l_mp, efip); > - spin_lock(&ailp->xa_lock); > + switch (lip->li_type) { > + case XFS_LI_EFI: > + error = xlog_recover_process_efi(log->l_mp, ailp, lip); > + break; > + } I think I'd prefer to see the locking remain here rather than get buried in the helper functions. That said, this allows us to check the recovered bit without a lock cycle. Meh, either way: Reviewed-by: Brian Foster > if (error) > goto out; > lip = xfs_trans_ail_cursor_next(ailp, &cur); > @@ -4296,15 +4281,14 @@ out: > } > > /* > - * A cancel occurs when the mount has failed and we're bailing out. Release all > - * pending EFIs so they don't pin the AIL. > + * A cancel occurs when the mount has failed and we're bailing out. > + * Release all pending log intent items so they don't pin the AIL. > */ > STATIC int > -xlog_recover_cancel_efis( > +xlog_recover_cancel_intents( > struct xlog *log) > { > struct xfs_log_item *lip; > - struct xfs_efi_log_item *efip; > int error = 0; > struct xfs_ail_cursor cur; > struct xfs_ail *ailp; > @@ -4314,22 +4298,22 @@ xlog_recover_cancel_efis( > lip = xfs_trans_ail_cursor_first(ailp, &cur, 0); > while (lip != NULL) { > /* > - * We're done when we see something other than an EFI. > - * There should be no EFIs left in the AIL now. > + * We're done when we see something other than an intent. > + * There should be no intents left in the AIL now. > */ > - if (lip->li_type != XFS_LI_EFI) { > + if (!xlog_item_is_intent(lip)) { > #ifdef DEBUG > for (; lip; lip = xfs_trans_ail_cursor_next(ailp, &cur)) > - ASSERT(lip->li_type != XFS_LI_EFI); > + ASSERT(!xlog_item_is_intent(lip)); > #endif > break; > } > > - efip = container_of(lip, struct xfs_efi_log_item, efi_item); > - > - spin_unlock(&ailp->xa_lock); > - xfs_efi_release(efip); > - spin_lock(&ailp->xa_lock); > + switch (lip->li_type) { > + case XFS_LI_EFI: > + xlog_recover_cancel_efi(log->l_mp, ailp, lip); > + break; > + } > > lip = xfs_trans_ail_cursor_next(ailp, &cur); > } > @@ -5140,16 +5124,16 @@ xlog_recover_finish( > */ > if (log->l_flags & XLOG_RECOVERY_NEEDED) { > int error; > - error = xlog_recover_process_efis(log); > + error = xlog_recover_process_intents(log); > if (error) { > - xfs_alert(log->l_mp, "Failed to recover EFIs"); > + xfs_alert(log->l_mp, "Failed to recover intents"); > return error; > } > /* > - * Sync the log to get all the EFIs out of the AIL. > + * Sync the log to get all the intents out of the AIL. > * This isn't absolutely necessary, but it helps in > * case the unlink transactions would have problems > - * pushing the EFIs out of the way. > + * pushing the intents out of the way. > */ > xfs_log_force(log->l_mp, XFS_LOG_SYNC); > > @@ -5174,7 +5158,7 @@ xlog_recover_cancel( > int error = 0; > > if (log->l_flags & XLOG_RECOVERY_NEEDED) > - error = xlog_recover_cancel_efis(log); > + error = xlog_recover_cancel_intents(log); > > return error; > } > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Aug 2 13:48:08 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 231337CA4 for ; Tue, 2 Aug 2016 13:48:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8D253AC001 for ; Tue, 2 Aug 2016 11:48:04 -0700 (PDT) X-ASG-Debug-ID: 1470163682-0bf57b369b355d50001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id CkGyfO2jvSRD2LWI (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 11:48:03 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3413885A07; Tue, 2 Aug 2016 18:48:02 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72Im1pP028102; Tue, 2 Aug 2016 14:48:01 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id E8844120BDC; Tue, 2 Aug 2016 14:48:00 -0400 (EDT) Date: Tue, 2 Aug 2016 14:48:00 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 19/47] xfs: add tracepoints and error injection for deferred extent freeing Message-ID: <20160802184800.GB58152@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 19/47] xfs: add tracepoints and error injection for deferred extent freeing References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907709074.25461.17602977707506082040.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907709074.25461.17602977707506082040.stgit@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Tue, 02 Aug 2016 18:48:02 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470163682 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 3821 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 20, 2016 at 09:58:10PM -0700, Darrick J. Wong wrote: > Add a couple of tracepoints for the deferred extent free operation and > a site for injecting errors while finishing the operation. This makes > it easier to debug deferred ops and test log redo. > > Signed-off-by: Darrick J. Wong > --- > fs/xfs/libxfs/xfs_alloc.c | 7 +++++++ > fs/xfs/libxfs/xfs_bmap.c | 2 ++ > fs/xfs/xfs_error.h | 4 +++- > fs/xfs/xfs_trace.h | 5 ++++- > 4 files changed, 16 insertions(+), 2 deletions(-) > > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c > index 5993f87..22ac3f1 100644 > --- a/fs/xfs/libxfs/xfs_alloc.c > +++ b/fs/xfs/libxfs/xfs_alloc.c > @@ -2702,6 +2702,13 @@ xfs_free_extent( > > ASSERT(len != 0); > > + trace_xfs_bmap_free_deferred(mp, agno, 0, agbno, len); > + Hmm, but the bmap code isn't the only caller here. I was thinking that maybe we'd be better served by pushing these down into xfs_defer_add() and friends, but I guess we don't necessarily have the extent information at that layer. How about we just rename these tracepoints to match the function names so they don't confuse me in the future? :) > + if (XFS_TEST_ERROR(false, mp, > + XFS_ERRTAG_FREE_EXTENT, > + XFS_RANDOM_FREE_EXTENT)) > + return -EIO; > + > error = xfs_free_extent_fix_freelist(tp, agno, &agbp); > if (error) > return error; > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > index 540a6b7..8e14ff4 100644 > --- a/fs/xfs/libxfs/xfs_bmap.c > +++ b/fs/xfs/libxfs/xfs_bmap.c > @@ -596,6 +596,8 @@ xfs_bmap_add_free( > new = kmem_zone_alloc(xfs_bmap_free_item_zone, KM_SLEEP); > new->xefi_startblock = bno; > new->xefi_blockcount = (xfs_extlen_t)len; > + trace_xfs_bmap_free_defer(mp, XFS_FSB_TO_AGNO(mp, bno), 0, > + XFS_FSB_TO_AGBNO(mp, bno), len); > xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_FREE, &new->xefi_list); > } > > diff --git a/fs/xfs/xfs_error.h b/fs/xfs/xfs_error.h > index 2e4f67f..da6f951 100644 > --- a/fs/xfs/xfs_error.h > +++ b/fs/xfs/xfs_error.h > @@ -90,7 +90,8 @@ extern void xfs_verifier_error(struct xfs_buf *bp); > #define XFS_ERRTAG_STRATCMPL_IOERR 19 > #define XFS_ERRTAG_DIOWRITE_IOERR 20 > #define XFS_ERRTAG_BMAPIFORMAT 21 > -#define XFS_ERRTAG_MAX 22 > +#define XFS_ERRTAG_FREE_EXTENT 22 > +#define XFS_ERRTAG_MAX 23 > > /* > * Random factors for above tags, 1 means always, 2 means 1/2 time, etc. > @@ -117,6 +118,7 @@ extern void xfs_verifier_error(struct xfs_buf *bp); > #define XFS_RANDOM_STRATCMPL_IOERR (XFS_RANDOM_DEFAULT/10) > #define XFS_RANDOM_DIOWRITE_IOERR (XFS_RANDOM_DEFAULT/10) > #define XFS_RANDOM_BMAPIFORMAT XFS_RANDOM_DEFAULT > +#define XFS_RANDOM_FREE_EXTENT 1 > Why not XFS_RANDOM_DEFAULT? Brian > #ifdef DEBUG > extern int xfs_error_test_active; > diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h > index a45b030..939caf5 100644 > --- a/fs/xfs/xfs_trace.h > +++ b/fs/xfs/xfs_trace.h > @@ -2417,9 +2417,12 @@ DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_cancel); > DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_finish); > DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_abort); > > -DEFINE_PHYS_EXTENT_DEFERRED_EVENT(xfs_defer_phys_extent); > DEFINE_MAP_EXTENT_DEFERRED_EVENT(xfs_defer_map_extent); > > +#define DEFINE_BMAP_FREE_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT > +DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_defer); > +DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_deferred); > + > #endif /* _TRACE_XFS_H */ > > #undef TRACE_INCLUDE_PATH > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Aug 2 13:48:49 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 A39CA7CA4 for ; Tue, 2 Aug 2016 13:48:49 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 29717AC001 for ; Tue, 2 Aug 2016 11:48:49 -0700 (PDT) X-ASG-Debug-ID: 1470163728-0bf8157e6d3cf180001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id e2istbrTdiyzoXny (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 11:48:48 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B7E7B4E022; Tue, 2 Aug 2016 18:48:47 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72ImlSS001650; Tue, 2 Aug 2016 14:48:47 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 81915120BDC; Tue, 2 Aug 2016 14:48:46 -0400 (EDT) Date: Tue, 2 Aug 2016 14:48:46 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 20/47] xfs: increase XFS_BTREE_MAXLEVELS to fit the rmapbt Message-ID: <20160802184845.GC58152@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 20/47] xfs: increase XFS_BTREE_MAXLEVELS to fit the rmapbt References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907709719.25461.3104352212846077948.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <146907709719.25461.3104352212846077948.stgit@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 02 Aug 2016 18:48:47 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470163728 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1458 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 20, 2016 at 09:58:17PM -0700, Darrick J. Wong wrote: > By my calculations, a 1,073,741,824 block AG with a 1k block size > can attain a maximum height of 9. Assuming a record size of 24 > bytes, a key/ptr size of 44 bytes, and half-full btree nodes, > we'd need 53,687,092 blocks for the records and ~6 million blocks > for the keys. That requires a btree of height 9. > > Signed-off-by: Darrick J. Wong > --- I believe you.. :) but could you add a bit more detail to the commit log just to describe the calculations (e.g., how many records per leaf block, keys per node block) so 1.) I don't have to try and figure it out ;) (and probably get it wrong) and 2.) so we have a reference in the git repo going forward? Brian > fs/xfs/libxfs/xfs_btree.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > > diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h > index b8bbb21..629ef4f 100644 > --- a/fs/xfs/libxfs/xfs_btree.h > +++ b/fs/xfs/libxfs/xfs_btree.h > @@ -133,7 +133,7 @@ do { \ > } \ > } while (0) > > -#define XFS_BTREE_MAXLEVELS 8 /* max of all btrees */ > +#define XFS_BTREE_MAXLEVELS 9 /* max of all btrees */ > > struct xfs_btree_ops { > /* size of the key and record structures */ > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From jeffm@suse.com Tue Aug 2 13:51:16 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 4983F7CA4 for ; Tue, 2 Aug 2016 13:51:16 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 19B28304039 for ; Tue, 2 Aug 2016 11:51:16 -0700 (PDT) X-ASG-Debug-ID: 1470163870-0bf57b369d355f30001-NocioJ Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id eGgzCAOGjAn60itq (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO) for ; Tue, 02 Aug 2016 11:51:11 -0700 (PDT) X-Barracuda-Envelope-From: jeffm@suse.com X-Barracuda-Effective-Source-IP: mx2.suse.de[195.135.220.15] 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 00A58AAD1; Tue, 2 Aug 2016 18:51:10 +0000 (UTC) Subject: Re: Old bugs in xfsprogs? To: Eric Sandeen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Old bugs in xfsprogs? References: <7e185931-8830-5f31-7abb-5419bb255991@suse.com> <626eedea-2b9a-4ca3-cd3d-1e528f45526f@sandeen.net> From: Jeff Mahoney Message-ID: <74fde7f6-54a2-078f-6064-d9e32564f9a7@suse.com> Date: Tue, 2 Aug 2016 14:51:06 -0400 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <626eedea-2b9a-4ca3-cd3d-1e528f45526f@sandeen.net> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="OkkOVG4prTUTD7bkTVxPEP8qL1jqf1LAE" X-Barracuda-Connect: mx2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1470163871 X-Barracuda-Encrypted: ECDHE-RSA-AES256-SHA X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-ASG-Orig-Subj: Re: Old bugs in xfsprogs? X-Barracuda-Scan-Msg-Size: 27295 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31699 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --OkkOVG4prTUTD7bkTVxPEP8qL1jqf1LAE Content-Type: multipart/mixed; boundary="Ip5vvUTc7UusOCKoPV4xFml4tRq3onsnd" From: Jeff Mahoney To: Eric Sandeen , xfs@oss.sgi.com Message-ID: <74fde7f6-54a2-078f-6064-d9e32564f9a7@suse.com> Subject: Re: Old bugs in xfsprogs? References: <7e185931-8830-5f31-7abb-5419bb255991@suse.com> <626eedea-2b9a-4ca3-cd3d-1e528f45526f@sandeen.net> In-Reply-To: <626eedea-2b9a-4ca3-cd3d-1e528f45526f@sandeen.net> --Ip5vvUTc7UusOCKoPV4xFml4tRq3onsnd Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable On 8/2/16 11:00 AM, Eric Sandeen wrote: > On 8/2/16 8:20 AM, Jeff Mahoney wrote: >> Hi all - >> >> While investigating a weird report on an internal list I found a few o= ld >> commits that don't look quite right and that may be very old bugs. I >> know it's hard to go back nearly 15 years, especially in the days wher= e >> very short commit messages were still acceptable, and try to remember >> why certain changes happened. In this case, a weird corner case[1] >> would've been caught, xfs_repair would've bailed, and a file system ma= y >> have survived (despite obvious user error). >> >> 1/ Commit 5000d01d212f (white space cleanup) >=20 > Meh, not a white space cleanup, is it! >=20 >> diff --git a/libxlog/util.c b/libxlog/util.c >> index 7aca165..aa3093d 100644 >> --- a/libxlog/util.c >> +++ b/libxlog/util.c >> @@ -49,8 +49,10 @@ header_check_uuid(xfs_mount_t *mp, xlog_rec_header_= t >> *head) >> printf("* ERROR: mismatched uuid in log\n" >> "* SB : %s\n* log: %s\n", >> uu_sb, uu_log); >> + >> + memcpy(&mp->m_sb.sb_uuid, head->h_fs_uuid, sizeof(uuid_t)); >> >> - return 1; >> + return 0; >> } >=20 > However, after seeing the mismatch, it "fixes" it by copying the header= > uuid into the mount point uuid. >=20 > But that doesn't seem like the right approach at all, and it renders al= l > the callers who check the return value of header_check_uuid pointless. > So yeah, doesn't look good to me. >=20 >> This one may well have been intended as a repair operation or perhaps = it >> was accidentally duplicated from another chunk in the patch. At any >> rate, it hides a mismatched UUID between the log and the superblock fr= om >> the rest of xfs_repair. The user sees the "error" message but it >> carries on anyway. >> >> 2) Commit d321ceac8da (add libxlog directory.) >> >> I believe this was supposed to be as simple as pushing some >> functionality from logprint into a new libxlog library, but the result= >> is that things that used to return an error no longer did. The >> print_exit global that was initialized to 1 in logprint is initialized= >> to 0 in libxlog and never set. So we always print an error message bu= t >> then carry on. So even if the header_check_uuid() call above would fa= il >> properly, the error is printed and then the error condition ignored. >=20 > Sigh, yeah, the old commits are wild west. :( >=20 > In this case header_check_uuid returned 0 anyway,so print_exit would > not have helped, but I think you're right. >=20 > A perfect storm of derp. ;) Haha, yep. >> -Jeff >> >> [1] The details are still murky, but what I got was that the user ran >> xfs_repair -L (yup, i know) on an image file that contained partitions= =2E >> It found a valid XFS superblock and then "repaired" the file system to= >> an empty state since everything it found was "corrupt." I suspect tha= t >> there was an XFS file system on the raw image file, which was then >> partitioned without clearing the MBR, and the expected XFS file system= >> was created on the first partition. xfs_repair was pointed at the who= le >> image file, discovered the old superblock, and remade the fs in its ow= n >> image since nothing was at the proper locations. >=20 > Oh, so it found 4 matching, old, valid, superblocks? Ugh. I don't kno= w > how to protect against that, although it probably should hav= e > found a few non-matching supers along the way as well. I wonder if we > should be more cautious in that case. Well, it at least found the non-matching log but then ran into the trouble above. > I could imagine that maybe for each candidate super we find, we should > look at its geometry, and spot-check the other locations that it indica= tes > should contain a superblock. If we get enough semi-valid but conflicti= ng > "sets," maybe we should bail out and ask. It's quite a corner case, th= o. I'm not sure a geometry check would've helped here. The superblock geometry still would've covered the whole, unpartitioned device. Since we're already linking with blkid, maybe a check to see if there's a partition table on the device and bail if it sees one, unless forced? The part that I'm still trying to explain is how it managed to get a good magic from the log and then got the wrong uuid. > Any chance you have full xfs_repair output? Sure, below. I heard back from the reporter and confirmed that my hypothesis of mkfs -> fdisk -> mkfs was what happened. He's on SLE12 SP1, so that means xfsprogs 3.2.1. -Jeff --- labadmin:/ssd # xfs_repair postgre.raw -L Phase 1 - find and verify superblock... - reporting progress in intervals of 15 minutes sb root inode value 18446744073709551615 (NULLFSINO) inconsistent with calculated value 128 resetting superblock root inode pointer to 128 sb realtime bitmap inode 18446744073709551615 (NULLFSINO) inconsistent with calculated value 129 resetting superblock realtime bitmap ino pointer to 129 sb realtime summary inode 18446744073709551615 (NULLFSINO) inconsistent with calculated value 130 resetting superblock realtime summary ino pointer to 130 Phase 2 - using internal log - zero log... * ERROR: mismatched uuid in log * SB : ae384026-e3ac-4350-90b8-6dc1ac91595d * log: 4cb79a9a-4b85-40fd-aed5-c7f2de36a3f5 ALERT: The filesystem has valuable metadata changes in a log which is bei= ng destroyed because the -L option was used. - scan filesystem freespace and inode maps... Metadata corruption detected at block 0x1/0x200 Metadata corruption detected at block 0x2/0x200 bad magic # 0x0 for agf 0 bad version # 0 for agf 0 bad length 0 for agf 0, should be 491520 bad magic # 0x0 for agi 0 bad version # 0 for agi 0 bad length # 0 for agi 0, should be 491520 reset bad agf for ag 0 reset bad agi for ag 0 bad agbno 0 for btbno root, agno 0 bad agbno 0 for btbcnt root, agno 0 bad agbno 0 for inobt root, agno 0 agi unlinked bucket 0 is 0 in ag 0 (inode=3D0) agi unlinked bucket 1 is 0 in ag 0 (inode=3D0) agi unlinked bucket 2 is 0 in ag 0 (inode=3D0) agi unlinked bucket 3 is 0 in ag 0 (inode=3D0) agi unlinked bucket 4 is 0 in ag 0 (inode=3D0) agi unlinked bucket 5 is 0 in ag 0 (inode=3D0) agi unlinked bucket 6 is 0 in ag 0 (inode=3D0) agi unlinked bucket 7 is 0 in ag 0 (inode=3D0) agi unlinked bucket 8 is 0 in ag 0 (inode=3D0) agi unlinked bucket 9 is 0 in ag 0 (inode=3D0) agi unlinked bucket 10 is 0 in ag 0 (inode=3D0) agi unlinked bucket 11 is 0 in ag 0 (inode=3D0) agi unlinked bucket 12 is 0 in ag 0 (inode=3D0) agi unlinked bucket 13 is 0 in ag 0 (inode=3D0) agi unlinked bucket 14 is 0 in ag 0 (inode=3D0) agi unlinked bucket 15 is 0 in ag 0 (inode=3D0) agi unlinked bucket 16 is 0 in ag 0 (inode=3D0) agi unlinked bucket 17 is 0 in ag 0 (inode=3D0) agi unlinked bucket 18 is 0 in ag 0 (inode=3D0) agi unlinked bucket 19 is 0 in ag 0 (inode=3D0) agi unlinked bucket 20 is 0 in ag 0 (inode=3D0) agi unlinked bucket 21 is 0 in ag 0 (inode=3D0) agi unlinked bucket 22 is 0 in ag 0 (inode=3D0) agi unlinked bucket 23 is 0 in ag 0 (inode=3D0) agi unlinked bucket 24 is 0 in ag 0 (inode=3D0) agi unlinked bucket 25 is 0 in ag 0 (inode=3D0) agi unlinked bucket 26 is 0 in ag 0 (inode=3D0) agi unlinked bucket 27 is 0 in ag 0 (inode=3D0) agi unlinked bucket 28 is 0 in ag 0 (inode=3D0) agi unlinked bucket 29 is 0 in ag 0 (inode=3D0) agi unlinked bucket 30 is 0 in ag 0 (inode=3D0) agi unlinked bucket 31 is 0 in ag 0 (inode=3D0) agi unlinked bucket 32 is 0 in ag 0 (inode=3D0) agi unlinked bucket 33 is 0 in ag 0 (inode=3D0) agi unlinked bucket 34 is 0 in ag 0 (inode=3D0) agi unlinked bucket 35 is 0 in ag 0 (inode=3D0) agi unlinked bucket 36 is 0 in ag 0 (inode=3D0) agi unlinked bucket 37 is 0 in ag 0 (inode=3D0) agi unlinked bucket 38 is 0 in ag 0 (inode=3D0) agi unlinked bucket 39 is 0 in ag 0 (inode=3D0) agi unlinked bucket 40 is 0 in ag 0 (inode=3D0) agi unlinked bucket 41 is 0 in ag 0 (inode=3D0) agi unlinked bucket 42 is 0 in ag 0 (inode=3D0) agi unlinked bucket 43 is 0 in ag 0 (inode=3D0) agi unlinked bucket 44 is 0 in ag 0 (inode=3D0) agi unlinked bucket 45 is 0 in ag 0 (inode=3D0) agi unlinked bucket 46 is 0 in ag 0 (inode=3D0) agi unlinked bucket 47 is 0 in ag 0 (inode=3D0) agi unlinked bucket 48 is 0 in ag 0 (inode=3D0) agi unlinked bucket 49 is 0 in ag 0 (inode=3D0) agi unlinked bucket 50 is 0 in ag 0 (inode=3D0) agi unlinked bucket 51 is 0 in ag 0 (inode=3D0) agi unlinked bucket 52 is 0 in ag 0 (inode=3D0) agi unlinked bucket 53 is 0 in ag 0 (inode=3D0) agi unlinked bucket 54 is 0 in ag 0 (inode=3D0) agi unlinked bucket 55 is 0 in ag 0 (inode=3D0) agi unlinked bucket 56 is 0 in ag 0 (inode=3D0) agi unlinked bucket 57 is 0 in ag 0 (inode=3D0) agi unlinked bucket 58 is 0 in ag 0 (inode=3D0) agi unlinked bucket 59 is 0 in ag 0 (inode=3D0) agi unlinked bucket 60 is 0 in ag 0 (inode=3D0) agi unlinked bucket 61 is 0 in ag 0 (inode=3D0) agi unlinked bucket 62 is 0 in ag 0 (inode=3D0) agi unlinked bucket 63 is 0 in ag 0 (inode=3D0) sb_fdblocks 7860416, counted 7368900 - 10:29:06: scanning filesystem freespace - 16 of 16 allocation groups done root inode chunk not found Phase 3 - for each AG... - scan and clear agi unlinked lists... - 10:29:06: scanning agi unlinked lists - 16 of 16 allocation groups done - process known inodes and perform inode discovery... - agno =3D 0 - agno =3D 15 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x40/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 Metadata corruption detected at block 0x50/0x2000 bad magic number 0x0 on inode 128 bad version number 0x0 on inode 128 bad magic number 0x0 on inode 129 bad version number 0x0 on inode 129 bad magic number 0x0 on inode 130 bad version number 0x0 on inode 130 bad magic number 0x0 on inode 131 bad version number 0x0 on inode 131 bad magic number 0x0 on inode 132 bad version number 0x0 on inode 132 bad magic number 0x0 on inode 133 bad version number 0x0 on inode 133 bad magic number 0x0 on inode 134 bad version number 0x0 on inode 134 bad magic number 0x0 on inode 135 bad version number 0x0 on inode 135 bad magic number 0x0 on inode 136 bad version number 0x0 on inode 136 bad magic number 0x0 on inode 137 bad version number 0x0 on inode 137 bad magic number 0x0 on inode 138 bad version number 0x0 on inode 138 bad magic number 0x0 on inode 139 bad version number 0x0 on inode 139 bad magic number 0x0 on inode 140 bad version number 0x0 on inode 140 bad magic number 0x0 on inode 141 bad version number 0x0 on inode 141 bad magic number 0x0 on inode 142 bad version number 0x0 on inode 142 bad magic number 0x0 on inode 143 bad version number 0x0 on inode 143 bad magic number 0x0 on inode 144 bad version number 0x0 on inode 144 bad magic number 0x0 on inode 145 bad version number 0x0 on inode 145 bad magic number 0x0 on inode 146 bad version number 0x0 on inode 146 bad magic number 0x0 on inode 147 bad version number 0x0 on inode 147 bad magic number 0x0 on inode 148 bad version number 0x0 on inode 148 bad magic number 0x0 on inode 149 bad version number 0x0 on inode 149 bad magic number 0x0 on inode 150 bad version number 0x0 on inode 150 bad magic number 0x0 on inode 151 bad version number 0x0 on inode 151 bad magic number 0x0 on inode 152 bad version number 0x0 on inode 152 bad magic number 0x0 on inode 153 bad version number 0x0 on inode 153 bad magic number 0x0 on inode 154 bad version number 0x0 on inode 154 bad magic number 0x0 on inode 155 bad version number 0x0 on inode 155 bad magic number 0x0 on inode 156 bad version number 0x0 on inode 156 bad magic number 0x0 on inode 157 bad version number 0x0 on inode 157 bad magic number 0x0 on inode 158 bad version number 0x0 on inode 158 bad magic number 0x0 on inode 159 bad version number 0x0 on inode 159 bad magic number 0x0 on inode 160 bad version number 0x0 on inode 160 bad magic number 0x0 on inode 161 bad version number 0x0 on inode 161 bad magic number 0x0 on inode 162 bad version number 0x0 on inode 162 bad magic number 0x0 on inode 163 bad version number 0x0 on inode 163 bad magic number 0x0 on inode 164 bad version number 0x0 on inode 164 bad magic number 0x0 on inode 165 bad version number 0x0 on inode 165 bad magic number 0x0 on inode 166 bad version number 0x0 on inode 166 bad magic number 0x0 on inode 167 bad version number 0x0 on inode 167 bad magic number 0x0 on inode 168 bad version number 0x0 on inode 168 bad magic number 0x0 on inode 169 bad version number 0x0 on inode 169 bad magic number 0x0 on inode 170 bad version number 0x0 on inode 170 bad magic number 0x0 on inode 171 bad version number 0x0 on inode 171 bad magic number 0x0 on inode 172 bad version number 0x0 on inode 172 bad magic number 0x0 on inode 173 bad version number 0x0 on inode 173 bad magic number 0x0 on inode 174 bad version number 0x0 on inode 174 bad magic number 0x0 on inode 175 bad version number 0x0 on inode 175 bad magic number 0x0 on inode 176 bad version number 0x0 on inode 176 bad magic number 0x0 on inode 177 bad version number 0x0 on inode 177 bad magic number 0x0 on inode 178 bad version number 0x0 on inode 178 bad magic number 0x0 on inode 179 bad version number 0x0 on inode 179 bad magic number 0x0 on inode 180 bad version number 0x0 on inode 180 bad magic number 0x0 on inode 181 bad version number 0x0 on inode 181 bad magic number 0x0 on inode 182 bad version number 0x0 on inode 182 bad magic number 0x0 on inode 183 bad version number 0x0 on inode 183 bad magic number 0x0 on inode 184 bad version number 0x0 on inode 184 bad magic number 0x0 on inode 185 bad version number 0x0 on inode 185 bad magic number 0x0 on inode 186 bad version number 0x0 on inode 186 bad magic number 0x0 on inode 187 bad version number 0x0 on inode 187 bad magic number 0x0 on inode 188 bad version number 0x0 on inode 188 bad magic number 0x0 on inode 189 bad version number 0x0 on inode 189 bad magic number 0x0 on inode 190 bad version number 0x0 on inode 190 bad magic number 0x0 on inode 191 bad version number 0x0 on inode 191 bad magic number 0x0 on inode 128, resetting magic number bad version number 0x0 on inode 128, resetting version number imap claims a free inode 128 is in use, correcting imap and clearing inod= e cleared root inode 128 bad magic number 0x0 on inode 129, resetting magic number bad version number 0x0 on inode 129, resetting version number imap claims a free inode 129 is in use, correcting imap and clearing inod= e cleared realtime bitmap inode 129 bad magic number 0x0 on inode 130, resetting magic number bad version number 0x0 on inode 130, resetting version number imap claims a free inode 130 is in use, correcting imap and clearing inod= e cleared realtime summary inode 130 bad magic number 0x0 on inode 131, resetting magic number bad version number 0x0 on inode 131, resetting version number bad magic number 0x0 on inode 132, resetting magic number bad version number 0x0 on inode 132, resetting version number bad magic number 0x0 on inode 133, resetting magic number bad version number 0x0 on inode 133, resetting version number bad magic number 0x0 on inode 134, resetting magic number bad version number 0x0 on inode 134, resetting version number bad magic number 0x0 on inode 135, resetting magic number bad version number 0x0 on inode 135, resetting version number bad magic number 0x0 on inode 136, resetting magic number bad version number 0x0 on inode 136, resetting version number bad magic number 0x0 on inode 137, resetting magic number bad version number 0x0 on inode 137, resetting version number bad magic number 0x0 on inode 138, resetting magic number bad version number 0x0 on inode 138, resetting version number bad magic number 0x0 on inode 139, resetting magic number bad version number 0x0 on inode 139, resetting version number bad magic number 0x0 on inode 140, resetting magic number bad version number 0x0 on inode 140, resetting version number bad magic number 0x0 on inode 141, resetting magic number bad version number 0x0 on inode 141, resetting version number bad magic number 0x0 on inode 142, resetting magic number bad version number 0x0 on inode 142, resetting version number bad magic number 0x0 on inode 143, resetting magic number bad version number 0x0 on inode 143, resetting version number bad magic number 0x0 on inode 144, resetting magic number bad version number 0x0 on inode 144, resetting version number bad magic number 0x0 on inode 145, resetting magic number bad version number 0x0 on inode 145, resetting version number bad magic number 0x0 on inode 146, resetting magic number bad version number 0x0 on inode 146, resetting version number bad magic number 0x0 on inode 147, resetting magic number bad version number 0x0 on inode 147, resetting version number bad magic number 0x0 on inode 148, resetting magic number bad version number 0x0 on inode 148, resetting version number bad magic number 0x0 on inode 149, resetting magic number bad version number 0x0 on inode 149, resetting version number bad magic number 0x0 on inode 150, resetting magic number bad version number 0x0 on inode 150, resetting version number bad magic number 0x0 on inode 151, resetting magic number bad version number 0x0 on inode 151, resetting version number bad magic number 0x0 on inode 152, resetting magic number bad version number 0x0 on inode 152, resetting version number bad magic number 0x0 on inode 153, resetting magic number bad version number 0x0 on inode 153, resetting version number bad magic number 0x0 on inode 154, resetting magic number bad version number 0x0 on inode 154, resetting version number bad magic number 0x0 on inode 155, resetting magic number bad version number 0x0 on inode 155, resetting version number bad magic number 0x0 on inode 156, resetting magic number bad version number 0x0 on inode 156, resetting version number bad magic number 0x0 on inode 157, resetting magic number bad version number 0x0 on inode 157, resetting version number bad magic number 0x0 on inode 158, resetting magic number bad version number 0x0 on inode 158, resetting version number bad magic number 0x0 on inode 159, resetting magic number bad version number 0x0 on inode 159, resetting version number bad magic number 0x0 on inode 160, resetting magic number bad version number 0x0 on inode 160, resetting version number bad magic number 0x0 on inode 161, resetting magic number bad version number 0x0 on inode 161, resetting version number bad magic number 0x0 on inode 162, resetting magic number bad version number 0x0 on inode 162, resetting version number bad magic number 0x0 on inode 163, resetting magic number bad version number 0x0 on inode 163, resetting version number bad magic number 0x0 on inode 164, resetting magic number bad version number 0x0 on inode 164, resetting version number bad magic number 0x0 on inode 165, resetting magic number bad version number 0x0 on inode 165, resetting version number bad magic number 0x0 on inode 166, resetting magic number bad version number 0x0 on inode 166, resetting version number bad magic number 0x0 on inode 167, resetting magic number bad version number 0x0 on inode 167, resetting version number bad magic number 0x0 on inode 168, resetting magic number bad version number 0x0 on inode 168, resetting version number bad magic number 0x0 on inode 169, resetting magic number bad version number 0x0 on inode 169, resetting version number bad magic number 0x0 on inode 170, resetting magic number bad version number 0x0 on inode 170, resetting version number bad magic number 0x0 on inode 171, resetting magic number bad version number 0x0 on inode 171, resetting version number bad magic number 0x0 on inode 172, resetting magic number bad version number 0x0 on inode 172, resetting version number bad magic number 0x0 on inode 173, resetting magic number bad version number 0x0 on inode 173, resetting version number bad magic number 0x0 on inode 174, resetting magic number bad version number 0x0 on inode 174, resetting version number bad magic number 0x0 on inode 175, resetting magic number bad version number 0x0 on inode 175, resetting version number bad magic number 0x0 on inode 176, resetting magic number bad version number 0x0 on inode 176, resetting version number bad magic number 0x0 on inode 177, resetting magic number bad version number 0x0 on inode 177, resetting version number bad magic number 0x0 on inode 178, resetting magic number bad version number 0x0 on inode 178, resetting version number bad magic number 0x0 on inode 179, resetting magic number bad version number 0x0 on inode 179, resetting version number bad magic number 0x0 on inode 180, resetting magic number bad version number 0x0 on inode 180, resetting version number bad magic number 0x0 on inode 181, resetting magic number bad version number 0x0 on inode 181, resetting version number bad magic number 0x0 on inode 182, resetting magic number bad version number 0x0 on inode 182, resetting version number bad magic number 0x0 on inode 183, resetting magic number bad version number 0x0 on inode 183, resetting version number bad magic number 0x0 on inode 184, resetting magic number bad version number 0x0 on inode 184, resetting version number bad magic number 0x0 on inode 185, resetting magic number bad version number 0x0 on inode 185, resetting version number bad magic number 0x0 on inode 186, resetting magic number bad version number 0x0 on inode 186, resetting version number bad magic number 0x0 on inode 187, resetting magic number bad version number 0x0 on inode 187, resetting version number bad magic number 0x0 on inode 188, resetting magic number bad version number 0x0 on inode 188, resetting version number bad magic number 0x0 on inode 189, resetting magic number bad version number 0x0 on inode 189, resetting version number bad magic number 0x0 on inode 190, resetting magic number bad version number 0x0 on inode 190, resetting version number bad magic number 0x0 on inode 191, resetting magic number bad version number 0x0 on inode 191, resetting version number - agno =3D 1 - agno =3D 2 - agno =3D 3 - agno =3D 4 - agno =3D 5 - agno =3D 6 - agno =3D 7 - agno =3D 8 - agno =3D 9 - agno =3D 10 - agno =3D 11 - agno =3D 12 - agno =3D 13 - agno =3D 14 - 10:29:06: process known inodes and inode discovery - 64 of 0 inodes done - process newly discovered inodes... - 10:29:06: process newly discovered inodes - 16 of 16 allocation groups done Phase 4 - check for duplicate blocks... - setting up duplicate extent list... root inode lost - 10:29:06: setting up duplicate extent list - 16 of 16 allocation groups done - check for inodes claiming duplicate blocks... - agno =3D 0 - agno =3D 3 - agno =3D 10 - agno =3D 13 - agno =3D 6 - agno =3D 5 - agno =3D 8 - agno =3D 1 - agno =3D 7 - agno =3D 9 - agno =3D 11 - agno =3D 12 - agno =3D 2 - agno =3D 15 - agno =3D 14 - agno =3D 4 - 10:29:06: check for inodes claiming duplicate blocks - 64 of 0 inodes done Phase 5 - rebuild AG headers and trees... - 10:29:06: rebuild AG headers and trees - 16 of 16 allocation groups done - 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 128 nlinks from 1 to 2 done --=20 Jeff Mahoney SUSE Labs --Ip5vvUTc7UusOCKoPV4xFml4tRq3onsnd-- --OkkOVG4prTUTD7bkTVxPEP8qL1jqf1LAE Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.19 (Darwin) Comment: GPGTools - http://gpgtools.org iQIcBAEBAgAGBQJXoOuaAAoJEB57S2MheeWy4MEQAJYKEz7KO4t3ECqEN23oOZji AqB8uSU6LBYLMqfXQTdVrr7KTtgswrIPbKo/goYkN8tgXWrowtS1PjJyNKfqv5u5 MsuqGEf5pjeS10rSHutwdYgLb48znt1X1u7oXenPmBCmRndDXfjBhTAkwB6IgEW2 XiSqMApMnyKszqRunQgyJ1P4wYO/LIWnhLg71Zb+ZPr8wf7P76DZomtmpG5R3gR+ B+ooeNiRjYChmCv/O7ujrIQXaJkoz1OP2m/L8s1k4qLp+vEUJW5ElYxtwt9P1Ubc KlqVY3UK+RbK8VSNY4Povu29PkwCHzbN3OCtRwTcs8cXOCZ3m0PorxHls4c+NJYI CNCrc7b5Kt6+g7lw2ZLDSf/GKgaJI2uq3NDHhIjezhe6d+dCI48hslljcpdyDKMX AkA2o6Gd4tjfjUe8qD3AY6nmGtrE/ThRtz2EQtMRESYAGvbv3580MC7gPunEW/q6 6StXM2wzh5Q3LMwL9Xd1ISbZF+6zEpJOVqo73VaoALhPb5QHxnO8WVrFWWe2DEVa eY7jglo/pqgzu8GvitdMG0D/cPsmf89w+eFDUSrab8YNZTKCA96lob3My+ERTquA 0agj0qZWFqrgBYMAwiiITeTtCEaJF19gsxLji9Tr7iTQFcCC0ATpPs2ecvqPa8Xj W/6i9JrztRexJiaz2/DI =VUeZ -----END PGP SIGNATURE----- --OkkOVG4prTUTD7bkTVxPEP8qL1jqf1LAE-- From tdm@sgi.com Tue Aug 2 14:11:06 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D6A1F7CA4 for ; Tue, 2 Aug 2016 14:11:06 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.106.9]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2D333AC006; Tue, 2 Aug 2016 12:11:03 -0700 (PDT) Received: from P-EXMB4-DC21.corp.sgi.com ([169.254.6.189]) by pv-excas2-dc21.corp.sgi.com ([137.38.106.9]) with mapi id 14.03.0224.002; Tue, 2 Aug 2016 14:11:02 -0500 From: Troy McCorkell To: Lista Unx , Chris Murphy , "xfs@oss.sgi.com" Subject: RE: partition 100% full No space left on device. looks like xfsiscorrupted or a bug Thread-Topic: partition 100% full No space left on device. looks like xfsiscorrupted or a bug Thread-Index: AQHR7OdopI4A4nmau0ijEYPt1q8NaKA2BwnD Date: Tue, 2 Aug 2016 19:11:01 +0000 Message-ID: References: <4278AB9734C1445A8E48635B155149F8@dinulap><20160729233524.GD16044@dastard><57CF7681619F42CCB4C0CF589E9686E5@dinulap> ,<5B47A77EB08F49A9B0843A6215A24C64@dinulap> In-Reply-To: <5B47A77EB08F49A9B0843A6215A24C64@dinulap> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [128.162.233.129] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 >On Mon, Aug 1, 2016 at 7:51 AM, Lista Unx wrote:=0A= >=0A= >> On Mon, Aug 1, 2016 at 6:00 AM, Lista Unx wrote:= =0A= >>=0A= >>> Yes, I've created a new gmail account especially to be able to post to= =0A= >>> this=0A= >>> mailing list which is filtering very seriously legit messages comming= =0A= >>> from=0A= >>> legit users, just because they are comming from yahoo accounts (servers= )=0A= >>> ...=0A= >>=0A= >> It's a Yahoo policy. It's completely reasonable for lists to reject=0A= >> yahoo.com emails, but ideally it'd reject them at signup time.=0A= >>=0A= >> https://help.yahoo.com/kb/SLN24050.html=0A= >> https://help.yahoo.com/kb/mail/SLN24016.html?impressions=3Dtrue=0A= >> http://www.pcworld.com/article/2141120/yahoo-email-antispoofing-policy-b= reaks-mailing-lists.html=0A= >>=0A= >>=0A= >=0A= >Ok, I understand. In this case:=0A= >1. Is a good idea to not allow those using yahoo accounts to subscribe to= =0A= >this list (with a clear message regarding why you are doing it)=0A= >and=0A= >2. Reject all messages comming from users which does not have valid=0A= >membership on this list (for sure, you will reduce spam)=0A= =0A= The policy for the xfs@oss.sgi.com mailing list is it is open and unmoderat= ed to allow any user=0A= of XFS to communicate with the XFS community. Yes, the policy does resul= t in spam on the mailing list.=0A= =0A= If you have problems with the mailing list please CC me on the email.=0A= =0A= Thanks,=0A= Troy McCorkell=0A= SGI=0A= =0A= =0A= From sandeen@sandeen.net Tue Aug 2 14:20:24 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 C6E737CA4 for ; Tue, 2 Aug 2016 14:20:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2EEECAC004 for ; Tue, 2 Aug 2016 12:20:23 -0700 (PDT) X-ASG-Debug-ID: 1470165621-0bf57c13692f80f0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id fWhtONQXJyxlG0UB for ; Tue, 02 Aug 2016 12:20:21 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Effective-Source-IP: sandeen.net[63.231.237.45] X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from [10.0.0.4] (liberator [10.0.0.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 508704AC120; Tue, 2 Aug 2016 14:20:21 -0500 (CDT) Subject: Re: Old bugs in xfsprogs? To: Jeff Mahoney , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Old bugs in xfsprogs? References: <7e185931-8830-5f31-7abb-5419bb255991@suse.com> <626eedea-2b9a-4ca3-cd3d-1e528f45526f@sandeen.net> <74fde7f6-54a2-078f-6064-d9e32564f9a7@suse.com> From: Eric Sandeen Message-ID: Date: Tue, 2 Aug 2016 14:20:13 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <74fde7f6-54a2-078f-6064-d9e32564f9a7@suse.com> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="70jVWDRsHHbjA2XOqvmCwImDRNuA924Vu" X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1470165621 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-ASG-Orig-Subj: Re: Old bugs in xfsprogs? X-Barracuda-Scan-Msg-Size: 2090 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31699 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --70jVWDRsHHbjA2XOqvmCwImDRNuA924Vu Content-Type: multipart/mixed; boundary="0AcBdpWt23SSM1A25G9jUKuVtaDv10304" From: Eric Sandeen To: Jeff Mahoney , xfs@oss.sgi.com Message-ID: Subject: Re: Old bugs in xfsprogs? References: <7e185931-8830-5f31-7abb-5419bb255991@suse.com> <626eedea-2b9a-4ca3-cd3d-1e528f45526f@sandeen.net> <74fde7f6-54a2-078f-6064-d9e32564f9a7@suse.com> In-Reply-To: <74fde7f6-54a2-078f-6064-d9e32564f9a7@suse.com> --0AcBdpWt23SSM1A25G9jUKuVtaDv10304 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable On 8/2/16 1:51 PM, Jeff Mahoney wrote: > On 8/2/16 11:00 AM, Eric Sandeen wrote: =2E.. >> I could imagine that maybe for each candidate super we find, we should= >> look at its geometry, and spot-check the other locations that it indic= ates >> should contain a superblock. If we get enough semi-valid but conflict= ing >> "sets," maybe we should bail out and ask. It's quite a corner case, t= ho. >=20 > I'm not sure a geometry check would've helped here. The superblock > geometry still would've covered the whole, unpartitioned device. Since= > we're already linking with blkid, maybe a check to see if there's a > partition table on the device and bail if it sees one, unless forced? > The part that I'm still trying to explain is how it managed to get a > good magic from the log and then got the wrong uuid. Hm, yeah, maybe right off the bat, if the primary super looks bad do a blkid check, and a (sigh) "are you sure?" just like we do for mkfs. >> Any chance you have full xfs_repair output? >=20 > Sure, below. I heard back from the reporter and confirmed that my > hypothesis of mkfs -> fdisk -> mkfs was what happened. He's on SLE12 > SP1, so that means xfsprogs 3.2.1. >=20 > -Jeff >=20 > --- >=20 > labadmin:/ssd # xfs_repair postgre.raw -L > Phase 1 - find and verify superblock... > - reporting progress in intervals of 15 minutes > sb root inode value 18446744073709551615 (NULLFSINO) inconsistent with > calculated value 128 > resetting superblock root inode pointer to 128 > sb realtime bitmap inode 18446744073709551615 (NULLFSINO) inconsistent > with calculated value 129 > resetting superblock realtime bitmap ino pointer to 129 > sb realtime summary inode 18446744073709551615 (NULLFSINO) inconsistent= > with calculated value 130 > resetting superblock realtime summary ino pointer to 130 huh. Ok, so I guess the primary in block zero was mostly-ok, and all of the backup supers were still more or less intact, and it didn't have to go searching... -Eric --0AcBdpWt23SSM1A25G9jUKuVtaDv10304-- --70jVWDRsHHbjA2XOqvmCwImDRNuA924Vu Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.17 (Darwin) Comment: GPGTools - http://gpgtools.org iQIcBAEBAgAGBQJXoPJ0AAoJECCuFpLhPd7gMMwP/0j3lITM12XKrfXHdOAzGiIz HjvNAwjvTtC1kx5mq8SnWFk/FPrhP8pDBzkF14aC3lyu4GB+Pp3SX+d7uGxpzQTK jdplNO2sB8iaNdPolvgMSXQ5UdU3cs6hnxIwlXqRnA6N6/3gyF3ZL2qihYG4NyK7 cNMfcBQYLu21CDtNMExAxlBLIpiND0ckyBOimfdYiiHaLetqzIGYDGBof/KVTC+r sEPSrLVXUMEU0XjIbJnfdIgB9wHmnNOqodjaJ6HYAT1FfLcwnngzYWRjW8JSE8wF lN6tdLUBVkq+r+WJUegdK6ZAFVBuAPJF6c4Dj4Kl4qwce/ftcz1K5DFDLcm12Prm bMKqrE6MDLOx3+12y0EI/hGkvKNtZjU5xmNL4eagz6WtjrzFYSggztDPJBTRMx9B 7nFofQGryW3aZ9fc9nQ79VGmP5zmue/DSeNk6ugFRSQhkhc/gdQuw1egubU309Fb c/QlNa8puWLRbB2MYH8WuwNJuVebbzuaF7Ug2vRYiwK/JwI90gON39mjI2rux6Lb trmayDjgjgh3sF9lSjLIgLQ/aUSSoQ+Sv2B/ksCjxOA7Zkd/pv1b/oOYBwth974u QoOJ/13huyQGayfEjITBmyrwdEndDHxQotH/yG/QwnmqeOqL7BJi5zQojykUJdaU 0ipfbFCZhskeoBddy4/C =QDdA -----END PGP SIGNATURE----- --70jVWDRsHHbjA2XOqvmCwImDRNuA924Vu-- From darrick.wong@oracle.com Tue Aug 2 15:06:51 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1D13B7CA4 for ; Tue, 2 Aug 2016 15:06:51 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id A39ABAC002 for ; Tue, 2 Aug 2016 13:06:47 -0700 (PDT) X-ASG-Debug-ID: 1470168401-0bf8157e6c3d2350001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id WM2NIrw3cpihDmhd (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 13:06:42 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u72K6dUE006047 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Aug 2016 20:06:39 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userv0022.oracle.com (8.14.4/8.13.8) with ESMTP id u72K6cih009623 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 20:06:39 GMT Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id u72K6bQ0008194; Tue, 2 Aug 2016 20:06:38 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 02 Aug 2016 13:06:36 -0700 Date: Tue, 2 Aug 2016 13:06:35 -0700 From: "Darrick J. Wong" To: Brian Foster Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 20/47] xfs: increase XFS_BTREE_MAXLEVELS to fit the rmapbt Message-ID: <20160802200635.GJ8590@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 20/47] xfs: increase XFS_BTREE_MAXLEVELS to fit the rmapbt References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907709719.25461.3104352212846077948.stgit@birch.djwong.org> <20160802184845.GC58152@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160802184845.GC58152@bfoster.bfoster> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1470168402 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2273 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31700 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Tue, Aug 02, 2016 at 02:48:46PM -0400, Brian Foster wrote: > On Wed, Jul 20, 2016 at 09:58:17PM -0700, Darrick J. Wong wrote: > > By my calculations, a 1,073,741,824 block AG with a 1k block size > > can attain a maximum height of 9. Assuming a record size of 24 > > bytes, a key/ptr size of 44 bytes, and half-full btree nodes, > > we'd need 53,687,092 blocks for the records and ~6 million blocks > > for the keys. That requires a btree of height 9. > > > > Signed-off-by: Darrick J. Wong > > --- > > I believe you.. :) but could you add a bit more detail to the commit log > just to describe the calculations (e.g., how many records per leaf > block, keys per node block) so 1.) I don't have to try and figure it out > ;) (and probably get it wrong) and 2.) so we have a reference in the git > repo going forward? Block size = 1024b sblock CRC header = 56b == 1024-56 = 968 bytes for tree data rmapbt record = 24b == 40 records per leaf block rmapbt ptr/key = 44b == 22 ptr/keys per block Worst case, each block is half full, so 20 records and 11 ptrs per block. 1073741824 rmap records / 20 records per block == 53687092 leaf blocks 53687092 leaves / 11 ptrs per block == 4880645 level 1 blocks == 443695 level 2 blocks == 40336 level 3 blocks == 3667 level 4 blocks == 334 level 5 blocks == 31 level 6 blocks == 3 level 7 blocks == 1 level 8 block Yay latency.... (Hey, at least this isn't ext4 which has no lower bound on block fill...) --D > > Brian > > > fs/xfs/libxfs/xfs_btree.h | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h > > index b8bbb21..629ef4f 100644 > > --- a/fs/xfs/libxfs/xfs_btree.h > > +++ b/fs/xfs/libxfs/xfs_btree.h > > @@ -133,7 +133,7 @@ do { \ > > } \ > > } while (0) > > > > -#define XFS_BTREE_MAXLEVELS 8 /* max of all btrees */ > > +#define XFS_BTREE_MAXLEVELS 9 /* max of all btrees */ > > > > struct xfs_btree_ops { > > /* size of the key and record structures */ > > > > _______________________________________________ > > xfs mailing list > > xfs@oss.sgi.com > > http://oss.sgi.com/mailman/listinfo/xfs From darrick.wong@oracle.com Tue Aug 2 15:24:39 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 DE4637CA4 for ; Tue, 2 Aug 2016 15:24:39 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id AF272304039 for ; Tue, 2 Aug 2016 13:24:36 -0700 (PDT) X-ASG-Debug-ID: 1470169473-0bf57c136a2f9850001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id L5RDD9sSuWBvFpAU (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 13:24:34 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: userp1040.oracle.com[156.151.31.81] 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 u72KOU6G025400 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 20:24:31 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserv0021.oracle.com (8.13.8/8.13.8) with ESMTP id u72KOUKA001210 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 20:24:30 GMT Received: from abhmp0012.oracle.com (abhmp0012.oracle.com [141.146.116.18]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id u72KORu2013103; Tue, 2 Aug 2016 20:24:28 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 02 Aug 2016 13:24:27 -0700 Date: Tue, 2 Aug 2016 13:24:25 -0700 From: "Darrick J. Wong" To: Brian Foster Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 19/47] xfs: add tracepoints and error injection for deferred extent freeing Message-ID: <20160802202425.GK8590@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 19/47] xfs: add tracepoints and error injection for deferred extent freeing References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907709074.25461.17602977707506082040.stgit@birch.djwong.org> <20160802184800.GB58152@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160802184800.GB58152@bfoster.bfoster> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: aserv0021.oracle.com [141.146.126.233] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1470169474 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 4909 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31700 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Tue, Aug 02, 2016 at 02:48:00PM -0400, Brian Foster wrote: > On Wed, Jul 20, 2016 at 09:58:10PM -0700, Darrick J. Wong wrote: > > Add a couple of tracepoints for the deferred extent free operation and > > a site for injecting errors while finishing the operation. This makes > > it easier to debug deferred ops and test log redo. > > > > Signed-off-by: Darrick J. Wong > > --- > > fs/xfs/libxfs/xfs_alloc.c | 7 +++++++ > > fs/xfs/libxfs/xfs_bmap.c | 2 ++ > > fs/xfs/xfs_error.h | 4 +++- > > fs/xfs/xfs_trace.h | 5 ++++- > > 4 files changed, 16 insertions(+), 2 deletions(-) > > > > > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c > > index 5993f87..22ac3f1 100644 > > --- a/fs/xfs/libxfs/xfs_alloc.c > > +++ b/fs/xfs/libxfs/xfs_alloc.c > > @@ -2702,6 +2702,13 @@ xfs_free_extent( > > > > ASSERT(len != 0); > > > > + trace_xfs_bmap_free_deferred(mp, agno, 0, agbno, len); > > + > > Hmm, but the bmap code isn't the only caller here. I was thinking that > maybe we'd be better served by pushing these down into xfs_defer_add() > and friends, but I guess we don't necessarily have the extent > information at that layer. Correct, we don't. > How about we just rename these tracepoints to match the function names > so they don't confuse me in the future? :) I broke with the function name convention so that the entry and exit tracepoints to deferred items would all have names that easily matched wildcards to make my life easier: # trace-cmd record -e 'xfs_*_defer' -e 'xfs_*_deferred' -F ... > > + if (XFS_TEST_ERROR(false, mp, > > + XFS_ERRTAG_FREE_EXTENT, > > + XFS_RANDOM_FREE_EXTENT)) > > + return -EIO; > > + > > error = xfs_free_extent_fix_freelist(tp, agno, &agbp); > > if (error) > > return error; > > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > > index 540a6b7..8e14ff4 100644 > > --- a/fs/xfs/libxfs/xfs_bmap.c > > +++ b/fs/xfs/libxfs/xfs_bmap.c > > @@ -596,6 +596,8 @@ xfs_bmap_add_free( > > new = kmem_zone_alloc(xfs_bmap_free_item_zone, KM_SLEEP); > > new->xefi_startblock = bno; > > new->xefi_blockcount = (xfs_extlen_t)len; > > + trace_xfs_bmap_free_defer(mp, XFS_FSB_TO_AGNO(mp, bno), 0, > > + XFS_FSB_TO_AGBNO(mp, bno), len); > > xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_FREE, &new->xefi_list); > > } > > > > diff --git a/fs/xfs/xfs_error.h b/fs/xfs/xfs_error.h > > index 2e4f67f..da6f951 100644 > > --- a/fs/xfs/xfs_error.h > > +++ b/fs/xfs/xfs_error.h > > @@ -90,7 +90,8 @@ extern void xfs_verifier_error(struct xfs_buf *bp); > > #define XFS_ERRTAG_STRATCMPL_IOERR 19 > > #define XFS_ERRTAG_DIOWRITE_IOERR 20 > > #define XFS_ERRTAG_BMAPIFORMAT 21 > > -#define XFS_ERRTAG_MAX 22 > > +#define XFS_ERRTAG_FREE_EXTENT 22 > > +#define XFS_ERRTAG_MAX 23 > > > > /* > > * Random factors for above tags, 1 means always, 2 means 1/2 time, etc. > > @@ -117,6 +118,7 @@ extern void xfs_verifier_error(struct xfs_buf *bp); > > #define XFS_RANDOM_STRATCMPL_IOERR (XFS_RANDOM_DEFAULT/10) > > #define XFS_RANDOM_DIOWRITE_IOERR (XFS_RANDOM_DEFAULT/10) > > #define XFS_RANDOM_BMAPIFORMAT XFS_RANDOM_DEFAULT > > +#define XFS_RANDOM_FREE_EXTENT 1 > > > > Why not XFS_RANDOM_DEFAULT? I don't want the injected redo errors going off at random -- I want to set one and have it go off the very next time we hit it. This way I can write the xfstests like so: mkfs/mount write to a file; sync set a logic bomb for the next time we free an extent truncate the file unmount check that xfs_repair grumbles about the dirty log mount check the file Were the free-extent bomb set to go off at XFS_RANDOM_DEFAULT intervals, it'd only have a 1/100 chance of triggering, which makes it harder to test. --D > > Brian > > > #ifdef DEBUG > > extern int xfs_error_test_active; > > diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h > > index a45b030..939caf5 100644 > > --- a/fs/xfs/xfs_trace.h > > +++ b/fs/xfs/xfs_trace.h > > @@ -2417,9 +2417,12 @@ DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_cancel); > > DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_finish); > > DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_abort); > > > > -DEFINE_PHYS_EXTENT_DEFERRED_EVENT(xfs_defer_phys_extent); > > DEFINE_MAP_EXTENT_DEFERRED_EVENT(xfs_defer_map_extent); > > > > +#define DEFINE_BMAP_FREE_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT > > +DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_defer); > > +DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_deferred); > > + > > #endif /* _TRACE_XFS_H */ > > > > #undef TRACE_INCLUDE_PATH > > > > _______________________________________________ > > xfs mailing list > > xfs@oss.sgi.com > > http://oss.sgi.com/mailman/listinfo/xfs From darrick.wong@oracle.com Tue Aug 2 15:35:45 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 CC0787CA4 for ; Tue, 2 Aug 2016 15:35:45 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9CD16304039 for ; Tue, 2 Aug 2016 13:35:45 -0700 (PDT) X-ASG-Debug-ID: 1470170143-0bf57b369b3586d0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id bRAzjgRELD6wu3nO (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 13:35:43 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u72KZHkG008418 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 20:35:17 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id u72KZGxr018550 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 20:35:17 GMT Received: from abhmp0016.oracle.com (abhmp0016.oracle.com [141.146.116.22]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id u72KZDRP017719; Tue, 2 Aug 2016 20:35:14 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 02 Aug 2016 13:35:13 -0700 Date: Tue, 2 Aug 2016 13:35:11 -0700 From: "Darrick J. Wong" To: Christoph Hellwig Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 18/47] xfs: refactor redo intent item processing Message-ID: <20160802203511.GL8590@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 18/47] xfs: refactor redo intent item processing References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907708421.25461.405239727630066080.stgit@birch.djwong.org> <20160801081023.GC30547@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801081023.GC30547@infradead.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1470170143 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2355 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31700 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Mon, Aug 01, 2016 at 01:10:23AM -0700, Christoph Hellwig wrote: > > +int > > +xfs_efi_recover( > > + struct xfs_mount *mp, > > + struct xfs_efi_log_item *efip) > > +{ > > + struct xfs_efd_log_item *efdp; > > + struct xfs_trans *tp; > > + int i; > > + int error = 0; > > + xfs_extent_t *extp; > > + xfs_fsblock_t startblock_fsb; > > + > > + ASSERT(!test_bit(XFS_EFI_RECOVERED, &efip->efi_flags)); > > + > > + /* > > + * First check the validity of the extents described by the > > + * EFI. If any are bad, then assume that all are bad and > > + * just toss the EFI. > > + */ > > + for (i = 0; i < efip->efi_format.efi_nextents; i++) { > > + extp = &(efip->efi_format.efi_extents[i]); > > + startblock_fsb = XFS_BB_TO_FSB(mp, > > + XFS_FSB_TO_DADDR(mp, extp->ext_start)); > > + if ((startblock_fsb == 0) || > > + (extp->ext_len == 0) || > > + (startblock_fsb >= mp->m_sb.sb_dblocks) || > > + (extp->ext_len >= mp->m_sb.sb_agblocks)) { > > + /* > > + * This will pull the EFI from the AIL and > > + * free the memory associated with it. > > + */ > > + set_bit(XFS_EFI_RECOVERED, &efip->efi_flags); > > + xfs_efi_release(efip); > > + return -EIO; > > + } > > + } > > I know it's just a code move, but there are lots of superflous braces > here, please remove them. Ok. It took me a while to figure out that you were referring to the parentheses on the if tests and not the curly braces around the code blocks. > > + error = xfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate, 0, 0, 0, &tp); > > + if (error) > > + return error; > > + efdp = xfs_trans_get_efd(tp, efip, efip->efi_format.efi_nextents); > > + > > + for (i = 0; i < efip->efi_format.efi_nextents; i++) { > > + extp = &(efip->efi_format.efi_extents[i]); > > and here.. > > > + ASSERT(XFS_LSN_CMP(last_lsn, lip->li_lsn) >= 0); > > This new check seems useful, but nothing in the changelog mentions > why it has been added. > > Otherwise this looks fine to me. I'm adding the following to the commit message: "Furthermore, ensure that log recovery only replays the redo items that were in the AIL prior to recovery by checking the item LSN against the largest LSN seen during log scanning. As written this should never happen, but we can be defensive anyway." --D From darrick.wong@oracle.com Tue Aug 2 15:48:05 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 85A177CA4 for ; Tue, 2 Aug 2016 15:48:05 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5644D304048 for ; Tue, 2 Aug 2016 13:48:05 -0700 (PDT) X-ASG-Debug-ID: 1470170882-0bf57c13672fa0b0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id 9wTcXeebTHHCNdwf (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 13:48:02 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: userp1040.oracle.com[156.151.31.81] X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u72KlxMG020152 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 20:47:59 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id u72Klwk4017116 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 20:47:59 GMT Received: from abhmp0015.oracle.com (abhmp0015.oracle.com [141.146.116.21]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id u72Klq1B004682; Tue, 2 Aug 2016 20:47:58 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 02 Aug 2016 13:47:47 -0700 Date: Tue, 2 Aug 2016 13:47:46 -0700 From: "Darrick J. Wong" To: Brian Foster Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 16/47] xfs: change xfs_bmap_{finish, cancel, init, free} -> xfs_defer_* Message-ID: <20160802204746.GM8590@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 16/47] xfs: change xfs_bmap_{finish, cancel, init, free} -> xfs_defer_* References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907707014.25461.326080392148826094.stgit@birch.djwong.org> <20160802173033.GD54148@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160802173033.GD54148@bfoster.bfoster> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1470170882 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 5407 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, MARKETING_SUBJECT, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31700 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Tue, Aug 02, 2016 at 01:30:33PM -0400, Brian Foster wrote: > On Wed, Jul 20, 2016 at 09:57:50PM -0700, Darrick J. Wong wrote: > > Drop the compatibility shims that we were using to integrate the new > > deferred operation mechanism into the existing code. No new code. > > > > v2: Also change xfs_bmap_free_item -> xfs_extent_free_item. > > > > Signed-off-by: Darrick J. Wong > > --- > > fs/xfs/libxfs/xfs_attr.c | 58 ++++++++++++++++++------------------ > > fs/xfs/libxfs/xfs_attr_remote.c | 14 ++++----- > > fs/xfs/libxfs/xfs_bmap.c | 46 ++++++++++++++--------------- > > fs/xfs/libxfs/xfs_bmap.h | 18 ++++++----- > > fs/xfs/libxfs/xfs_btree.h | 5 ++- > > fs/xfs/libxfs/xfs_da_btree.h | 4 +-- > > fs/xfs/libxfs/xfs_defer.h | 7 ---- > > fs/xfs/libxfs/xfs_dir2.c | 6 ++-- > > fs/xfs/libxfs/xfs_dir2.h | 8 +++-- > > fs/xfs/libxfs/xfs_ialloc.c | 6 ++-- > > fs/xfs/libxfs/xfs_ialloc.h | 2 + > > fs/xfs/libxfs/xfs_trans_resv.c | 4 +-- > > fs/xfs/xfs_bmap_util.c | 28 +++++++++--------- > > fs/xfs/xfs_bmap_util.h | 2 + > > fs/xfs/xfs_dquot.c | 10 +++--- > > fs/xfs/xfs_inode.c | 62 ++++++++++++++++++++------------------- > > fs/xfs/xfs_inode.h | 4 +-- > > fs/xfs/xfs_iomap.c | 24 ++++++++------- > > fs/xfs/xfs_rtalloc.c | 8 +++-- > > fs/xfs/xfs_super.c | 2 + > > fs/xfs/xfs_symlink.c | 16 +++++----- > > fs/xfs/xfs_trans.h | 5 --- > > fs/xfs/xfs_trans_extfree.c | 36 +++++++++++------------ > > 23 files changed, 182 insertions(+), 193 deletions(-) > > > > > ... > > diff --git a/fs/xfs/xfs_trans_extfree.c b/fs/xfs/xfs_trans_extfree.c > > index a9f34ee..b484902 100644 > > --- a/fs/xfs/xfs_trans_extfree.c > > +++ b/fs/xfs/xfs_trans_extfree.c > > @@ -35,7 +35,7 @@ > > * caller must use all nextents extents, because we are not > > * flexible about this at all. > > */ > > -struct xfs_efi_log_item * > > +STATIC struct xfs_efi_log_item * > > xfs_trans_get_efi(struct xfs_trans *tp, > > I think we should just fold this into the one caller below. > > > uint nextents) > > { > > @@ -59,7 +59,7 @@ xfs_trans_get_efi(struct xfs_trans *tp, > > * extent is to be logged as needing to be freed. It should > > * be called once for each extent to be freed. > > */ > > -void > > +STATIC void > > xfs_trans_log_efi_extent(struct xfs_trans *tp, > > struct xfs_efi_log_item *efip, > > xfs_fsblock_t start_block, > > Same here. Otherwise looks good: Ok, will do. --D > > Reviewed-by: Brian Foster > > > @@ -156,13 +156,13 @@ xfs_extent_free_diff_items( > > struct list_head *b) > > { > > struct xfs_mount *mp = priv; > > - struct xfs_bmap_free_item *ra; > > - struct xfs_bmap_free_item *rb; > > + struct xfs_extent_free_item *ra; > > + struct xfs_extent_free_item *rb; > > > > - ra = container_of(a, struct xfs_bmap_free_item, xbfi_list); > > - rb = container_of(b, struct xfs_bmap_free_item, xbfi_list); > > - return XFS_FSB_TO_AGNO(mp, ra->xbfi_startblock) - > > - XFS_FSB_TO_AGNO(mp, rb->xbfi_startblock); > > + ra = container_of(a, struct xfs_extent_free_item, xefi_list); > > + rb = container_of(b, struct xfs_extent_free_item, xefi_list); > > + return XFS_FSB_TO_AGNO(mp, ra->xefi_startblock) - > > + XFS_FSB_TO_AGNO(mp, rb->xefi_startblock); > > } > > > > /* Get an EFI. */ > > @@ -181,11 +181,11 @@ xfs_extent_free_log_item( > > void *intent, > > struct list_head *item) > > { > > - struct xfs_bmap_free_item *free; > > + struct xfs_extent_free_item *free; > > > > - free = container_of(item, struct xfs_bmap_free_item, xbfi_list); > > - xfs_trans_log_efi_extent(tp, intent, free->xbfi_startblock, > > - free->xbfi_blockcount); > > + free = container_of(item, struct xfs_extent_free_item, xefi_list); > > + xfs_trans_log_efi_extent(tp, intent, free->xefi_startblock, > > + free->xefi_blockcount); > > } > > > > /* Get an EFD so we can process all the free extents. */ > > @@ -207,13 +207,13 @@ xfs_extent_free_finish_item( > > void *done_item, > > void **state) > > { > > - struct xfs_bmap_free_item *free; > > + struct xfs_extent_free_item *free; > > int error; > > > > - free = container_of(item, struct xfs_bmap_free_item, xbfi_list); > > + free = container_of(item, struct xfs_extent_free_item, xefi_list); > > error = xfs_trans_free_extent(tp, done_item, > > - free->xbfi_startblock, > > - free->xbfi_blockcount); > > + free->xefi_startblock, > > + free->xefi_blockcount); > > kmem_free(free); > > return error; > > } > > @@ -231,9 +231,9 @@ STATIC void > > xfs_extent_free_cancel_item( > > struct list_head *item) > > { > > - struct xfs_bmap_free_item *free; > > + struct xfs_extent_free_item *free; > > > > - free = container_of(item, struct xfs_bmap_free_item, xbfi_list); > > + free = container_of(item, struct xfs_extent_free_item, xefi_list); > > kmem_free(free); > > } > > > > > > _______________________________________________ > > xfs mailing list > > xfs@oss.sgi.com > > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Aug 2 16:38:24 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 BC11C7CA4 for ; Tue, 2 Aug 2016 16:38:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3258FAC001 for ; Tue, 2 Aug 2016 14:38:21 -0700 (PDT) X-ASG-Debug-ID: 1470173899-0bf57c13692faed0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id jptPKdDKHC281DxK (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 14:38:19 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D90414E034; Tue, 2 Aug 2016 21:38:18 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72LcIkF025611; Tue, 2 Aug 2016 17:38:18 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 44007120BDC; Tue, 2 Aug 2016 17:38:17 -0400 (EDT) Date: Tue, 2 Aug 2016 17:38:17 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 19/47] xfs: add tracepoints and error injection for deferred extent freeing Message-ID: <20160802213816.GA8100@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 19/47] xfs: add tracepoints and error injection for deferred extent freeing References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907709074.25461.17602977707506082040.stgit@birch.djwong.org> <20160802184800.GB58152@bfoster.bfoster> <20160802202425.GK8590@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160802202425.GK8590@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 02 Aug 2016 21:38:18 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470173899 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 5787 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Aug 02, 2016 at 01:24:25PM -0700, Darrick J. Wong wrote: > On Tue, Aug 02, 2016 at 02:48:00PM -0400, Brian Foster wrote: > > On Wed, Jul 20, 2016 at 09:58:10PM -0700, Darrick J. Wong wrote: > > > Add a couple of tracepoints for the deferred extent free operation and > > > a site for injecting errors while finishing the operation. This makes > > > it easier to debug deferred ops and test log redo. > > > > > > Signed-off-by: Darrick J. Wong > > > --- > > > fs/xfs/libxfs/xfs_alloc.c | 7 +++++++ > > > fs/xfs/libxfs/xfs_bmap.c | 2 ++ > > > fs/xfs/xfs_error.h | 4 +++- > > > fs/xfs/xfs_trace.h | 5 ++++- > > > 4 files changed, 16 insertions(+), 2 deletions(-) > > > > > > > > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c > > > index 5993f87..22ac3f1 100644 > > > --- a/fs/xfs/libxfs/xfs_alloc.c > > > +++ b/fs/xfs/libxfs/xfs_alloc.c > > > @@ -2702,6 +2702,13 @@ xfs_free_extent( > > > > > > ASSERT(len != 0); > > > > > > + trace_xfs_bmap_free_deferred(mp, agno, 0, agbno, len); > > > + > > > > Hmm, but the bmap code isn't the only caller here. I was thinking that > > maybe we'd be better served by pushing these down into xfs_defer_add() > > and friends, but I guess we don't necessarily have the extent > > information at that layer. > > Correct, we don't. > > > How about we just rename these tracepoints to match the function names > > so they don't confuse me in the future? :) > > I broke with the function name convention so that the entry and exit > tracepoints to deferred items would all have names that easily matched > wildcards to make my life easier: > > # trace-cmd record -e 'xfs_*_defer' -e 'xfs_*_deferred' -F ... > The xfs_bmap_free_defer tp seems reasonable, but xfs_bmap_free_deferred doesn't really make sense when called via other places where nothing has been deferred. I'm not totally sure I follow what the goal is with this tracepoint wrt to naming that the trace_xfs_defer_*() tracepoints don't already achieve (combined with standard infrastructure tracepoints), but if the name is important, we should at least put it somewhere where it's only triggered via a deferred operation (e.g., xfs_extent_free_finish_item()). > > > + if (XFS_TEST_ERROR(false, mp, > > > + XFS_ERRTAG_FREE_EXTENT, > > > + XFS_RANDOM_FREE_EXTENT)) > > > + return -EIO; > > > + > > > error = xfs_free_extent_fix_freelist(tp, agno, &agbp); > > > if (error) > > > return error; > > > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > > > index 540a6b7..8e14ff4 100644 > > > --- a/fs/xfs/libxfs/xfs_bmap.c > > > +++ b/fs/xfs/libxfs/xfs_bmap.c > > > @@ -596,6 +596,8 @@ xfs_bmap_add_free( > > > new = kmem_zone_alloc(xfs_bmap_free_item_zone, KM_SLEEP); > > > new->xefi_startblock = bno; > > > new->xefi_blockcount = (xfs_extlen_t)len; > > > + trace_xfs_bmap_free_defer(mp, XFS_FSB_TO_AGNO(mp, bno), 0, > > > + XFS_FSB_TO_AGBNO(mp, bno), len); > > > xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_FREE, &new->xefi_list); > > > } > > > > > > diff --git a/fs/xfs/xfs_error.h b/fs/xfs/xfs_error.h > > > index 2e4f67f..da6f951 100644 > > > --- a/fs/xfs/xfs_error.h > > > +++ b/fs/xfs/xfs_error.h > > > @@ -90,7 +90,8 @@ extern void xfs_verifier_error(struct xfs_buf *bp); > > > #define XFS_ERRTAG_STRATCMPL_IOERR 19 > > > #define XFS_ERRTAG_DIOWRITE_IOERR 20 > > > #define XFS_ERRTAG_BMAPIFORMAT 21 > > > -#define XFS_ERRTAG_MAX 22 > > > +#define XFS_ERRTAG_FREE_EXTENT 22 > > > +#define XFS_ERRTAG_MAX 23 > > > > > > /* > > > * Random factors for above tags, 1 means always, 2 means 1/2 time, etc. > > > @@ -117,6 +118,7 @@ extern void xfs_verifier_error(struct xfs_buf *bp); > > > #define XFS_RANDOM_STRATCMPL_IOERR (XFS_RANDOM_DEFAULT/10) > > > #define XFS_RANDOM_DIOWRITE_IOERR (XFS_RANDOM_DEFAULT/10) > > > #define XFS_RANDOM_BMAPIFORMAT XFS_RANDOM_DEFAULT > > > +#define XFS_RANDOM_FREE_EXTENT 1 > > > > > > > Why not XFS_RANDOM_DEFAULT? > > I don't want the injected redo errors going off at random -- I want to set > one and have it go off the very next time we hit it. This way I can write > the xfstests like so: > > mkfs/mount > write to a file; sync > set a logic bomb for the next time we free an extent > truncate the file > > unmount > check that xfs_repair grumbles about the dirty log > mount > check the file > > Were the free-extent bomb set to go off at XFS_RANDOM_DEFAULT intervals, it'd > only have a 1/100 chance of triggering, which makes it harder to test. > Ok. Brian > --D > > > > > Brian > > > > > #ifdef DEBUG > > > extern int xfs_error_test_active; > > > diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h > > > index a45b030..939caf5 100644 > > > --- a/fs/xfs/xfs_trace.h > > > +++ b/fs/xfs/xfs_trace.h > > > @@ -2417,9 +2417,12 @@ DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_cancel); > > > DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_finish); > > > DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_abort); > > > > > > -DEFINE_PHYS_EXTENT_DEFERRED_EVENT(xfs_defer_phys_extent); > > > DEFINE_MAP_EXTENT_DEFERRED_EVENT(xfs_defer_map_extent); > > > > > > +#define DEFINE_BMAP_FREE_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT > > > +DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_defer); > > > +DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_deferred); > > > + > > > #endif /* _TRACE_XFS_H */ > > > > > > #undef TRACE_INCLUDE_PATH > > > > > > _______________________________________________ > > > xfs mailing list > > > xfs@oss.sgi.com > > > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Aug 2 16:38:27 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 3903C7CA4 for ; Tue, 2 Aug 2016 16:38:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id A4430AC001 for ; Tue, 2 Aug 2016 14:38:26 -0700 (PDT) X-ASG-Debug-ID: 1470173904-0bf57b369b359be0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id H0YJy4JqDWd8tdYt (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 14:38:25 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 563F68535A; Tue, 2 Aug 2016 21:38:24 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u72LcOOG020309; Tue, 2 Aug 2016 17:38:24 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id ED42A120BDC; Tue, 2 Aug 2016 17:38:22 -0400 (EDT) Date: Tue, 2 Aug 2016 17:38:22 -0400 From: Brian Foster To: "Darrick J. Wong" Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 20/47] xfs: increase XFS_BTREE_MAXLEVELS to fit the rmapbt Message-ID: <20160802213822.GB8100@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 20/47] xfs: increase XFS_BTREE_MAXLEVELS to fit the rmapbt References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907709719.25461.3104352212846077948.stgit@birch.djwong.org> <20160802184845.GC58152@bfoster.bfoster> <20160802200635.GJ8590@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160802200635.GJ8590@birch.djwong.org> User-Agent: Mutt/1.6.2 (2016-07-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 02 Aug 2016 21:38:24 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1470173904 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2594 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Aug 02, 2016 at 01:06:35PM -0700, Darrick J. Wong wrote: > On Tue, Aug 02, 2016 at 02:48:46PM -0400, Brian Foster wrote: > > On Wed, Jul 20, 2016 at 09:58:17PM -0700, Darrick J. Wong wrote: > > > By my calculations, a 1,073,741,824 block AG with a 1k block size > > > can attain a maximum height of 9. Assuming a record size of 24 > > > bytes, a key/ptr size of 44 bytes, and half-full btree nodes, > > > we'd need 53,687,092 blocks for the records and ~6 million blocks > > > for the keys. That requires a btree of height 9. > > > > > > Signed-off-by: Darrick J. Wong > > > --- > > > > I believe you.. :) but could you add a bit more detail to the commit log > > just to describe the calculations (e.g., how many records per leaf > > block, keys per node block) so 1.) I don't have to try and figure it out > > ;) (and probably get it wrong) and 2.) so we have a reference in the git > > repo going forward? > > Block size = 1024b > sblock CRC header = 56b > == 1024-56 = 968 bytes for tree data > > rmapbt record = 24b > == 40 records per leaf block > > rmapbt ptr/key = 44b > == 22 ptr/keys per block > > Worst case, each block is half full, so 20 records and 11 ptrs per block. > > 1073741824 rmap records / 20 records per block > == 53687092 leaf blocks > > 53687092 leaves / 11 ptrs per block > == 4880645 level 1 blocks > == 443695 level 2 blocks > == 40336 level 3 blocks > == 3667 level 4 blocks > == 334 level 5 blocks > == 31 level 6 blocks > == 3 level 7 blocks > == 1 level 8 block > Thanks! Seems Ok to me.. with that in the commit log: Reviewed-by: Brian Foster > Yay latency.... > > (Hey, at least this isn't ext4 which has no lower bound on block fill...) > > --D > > > > > Brian > > > > > fs/xfs/libxfs/xfs_btree.h | 2 +- > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > > > > diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h > > > index b8bbb21..629ef4f 100644 > > > --- a/fs/xfs/libxfs/xfs_btree.h > > > +++ b/fs/xfs/libxfs/xfs_btree.h > > > @@ -133,7 +133,7 @@ do { \ > > > } \ > > > } while (0) > > > > > > -#define XFS_BTREE_MAXLEVELS 8 /* max of all btrees */ > > > +#define XFS_BTREE_MAXLEVELS 9 /* max of all btrees */ > > > > > > struct xfs_btree_ops { > > > /* size of the key and record structures */ > > > > > > _______________________________________________ > > > xfs mailing list > > > xfs@oss.sgi.com > > > http://oss.sgi.com/mailman/listinfo/xfs From david@fromorbit.com Tue Aug 2 16:41:08 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 9DBE07CA4 for ; Tue, 2 Aug 2016 16:41:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0EBB1AC001 for ; Tue, 2 Aug 2016 14:41:07 -0700 (PDT) X-ASG-Debug-ID: 1470174064-0bf57c13682fafe0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id o3o2AABdwmqvzi7y for ; Tue, 02 Aug 2016 14:41:04 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Effective-Source-IP: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DKBADTEqFXEMmOLHldg0WBUoJ5g3mdOQEBBoxfg2WCKIIPgX2GFwQCAoE+ORQBAQEBAQEBBgEBAQEBAQEBNkCEXwEFOhwjEAgDGAklDwUlAwcaE4gwv0EBAQgCJR6FRIUVihsFmTOOdY9JSItog3cehEIqMogxAQEB Received: from ppp121-44-142-201.lns20.syd7.internode.on.net (HELO dastard) ([121.44.142.201]) by ipmail05.adl6.internode.on.net with ESMTP; 03 Aug 2016 07:11:02 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1bUhQr-00074Q-7L; Wed, 03 Aug 2016 07:41:01 +1000 Date: Wed, 3 Aug 2016 07:41:01 +1000 From: Dave Chinner To: "Darrick J. Wong" Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [PATCH] xfs: in _attrlist_by_handle, copy the cursor back to userspace Message-ID: <20160802214101.GM16044@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: in _attrlist_by_handle, copy the cursor back to userspace References: <20160802035651.GB8593@birch.djwong.org> <20160802122517.GD31492@infradead.org> <20160802154035.GI8590@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160802154035.GI8590@birch.djwong.org> 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: 1470174064 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 917 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31700 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Tue, Aug 02, 2016 at 08:40:35AM -0700, Darrick J. Wong wrote: > On Tue, Aug 02, 2016 at 05:25:17AM -0700, Christoph Hellwig wrote: > > On Mon, Aug 01, 2016 at 08:56:51PM -0700, Darrick J. Wong wrote: > > > When we're iterating inode xattrs by handle, we have to copy the > > > cursor back to userspace so that a subsequent invocation actually > > > retrieves subsequent contents. > > > > Testcase? > > Found it while continuing development of xfs_scrub. I'll send along the > xfstest patch when I've finished polishing it. (It was harder than usual since > xfs_io doesn't /use/ the attr-by-handle interface... nothing does.) It was (and probably still is) used by SGI's HSM. I thought there was some coverage of the interface in the dmapi part of the xfstests suite, but perhaps it's only tested by SGI's internal hsm test suite... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Aug 2 17:39:59 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 50C3D7CA4 for ; Tue, 2 Aug 2016 17:39:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 223048F8035 for ; Tue, 2 Aug 2016 15:39:58 -0700 (PDT) X-ASG-Debug-ID: 1470177592-0bf57b369e35c000001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id W1D1PdgbHqmMKoJd for ; Tue, 02 Aug 2016 15:39:52 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Effective-Source-IP: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DKBADIH6FXEMmOLHldg0WBUoJ5g3mdOQEBBoxfhg2CD4F9hhcEAgKBPjkUAQEBAQEBAQYBAQEBAQEBATZAhF8BBTocIxAIAw4KCSUPBSUDBxoTiDC/GAEBCAIlHoVEhBKBA4l+HQWZM451j0mMMIN3HoRCKjKIMQEBAQ Received: from ppp121-44-142-201.lns20.syd7.internode.on.net (HELO dastard) ([121.44.142.201]) by ipmail05.adl6.internode.on.net with ESMTP; 03 Aug 2016 08:09:51 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1bUiLm-0007AQ-CQ; Wed, 03 Aug 2016 08:39:50 +1000 Date: Wed, 3 Aug 2016 08:39:50 +1000 From: Dave Chinner To: Christoph Hellwig Cc: "Darrick J. Wong" , linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, bfoster@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH 11/47] xfs: move deferred operations into a separate file Message-ID: <20160802223950.GN16044@dastard> X-ASG-Orig-Subj: Re: [PATCH 11/47] xfs: move deferred operations into a separate file References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907703710.25461.16650495404061662831.stgit@birch.djwong.org> <20160801080223.GB30547@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160801080223.GB30547@infradead.org> 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: 1470177592 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 992 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31702 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Mon, Aug 01, 2016 at 01:02:23AM -0700, Christoph Hellwig wrote: > I looked over this again and I really don't see the use case of merging > it. Yes, the freed extent, rmap and reflink code is fairly similar, but > there is all kinds of subtile differences that we need to paper over using > methods and flags. I think we're better off not trying to share this > code and have a separate, but easily understandable implementation > for each btree. At least for the traditional traditional freed extent > case the new code also is a lot less optimal than the previous version. Rather than have to make major changes to core infrastructure now, let's work this out as a separate patchset to clean up the rmap and reflink code in the next couple of releases. It's going to be better to get working code out there now under the experimental tag than it is is to keep it as an out of tree patchset for another cycle. Cheers, Dave. -- Dave Chinner david@fromorbit.com From darrick.wong@oracle.com Tue Aug 2 17:43:37 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BE1497CA4 for ; Tue, 2 Aug 2016 17:43:37 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4106AAC002 for ; Tue, 2 Aug 2016 15:43:34 -0700 (PDT) X-ASG-Debug-ID: 1470177810-0bf8157e6a3d99a0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id Cbv1VxvSM04wcTpF (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 15:43:31 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u72MhTgt017401 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 22:43:29 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id u72MhSJU011320 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 22:43:28 GMT Received: from abhmp0015.oracle.com (abhmp0015.oracle.com [141.146.116.21]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id u72MhRE6009003; Tue, 2 Aug 2016 22:43:28 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 02 Aug 2016 15:43:27 -0700 Date: Tue, 2 Aug 2016 15:43:25 -0700 From: "Darrick J. Wong" To: Brian Foster Cc: david@fromorbit.com, linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com Subject: Re: [PATCH 19/47] xfs: add tracepoints and error injection for deferred extent freeing Message-ID: <20160802224325.GN8590@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 19/47] xfs: add tracepoints and error injection for deferred extent freeing References: <146907695530.25461.3225785294902719773.stgit@birch.djwong.org> <146907709074.25461.17602977707506082040.stgit@birch.djwong.org> <20160802184800.GB58152@bfoster.bfoster> <20160802202425.GK8590@birch.djwong.org> <20160802213816.GA8100@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160802213816.GA8100@bfoster.bfoster> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: aserv0022.oracle.com [141.146.126.234] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1470177811 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 6315 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31702 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Tue, Aug 02, 2016 at 05:38:17PM -0400, Brian Foster wrote: > On Tue, Aug 02, 2016 at 01:24:25PM -0700, Darrick J. Wong wrote: > > On Tue, Aug 02, 2016 at 02:48:00PM -0400, Brian Foster wrote: > > > On Wed, Jul 20, 2016 at 09:58:10PM -0700, Darrick J. Wong wrote: > > > > Add a couple of tracepoints for the deferred extent free operation and > > > > a site for injecting errors while finishing the operation. This makes > > > > it easier to debug deferred ops and test log redo. > > > > > > > > Signed-off-by: Darrick J. Wong > > > > --- > > > > fs/xfs/libxfs/xfs_alloc.c | 7 +++++++ > > > > fs/xfs/libxfs/xfs_bmap.c | 2 ++ > > > > fs/xfs/xfs_error.h | 4 +++- > > > > fs/xfs/xfs_trace.h | 5 ++++- > > > > 4 files changed, 16 insertions(+), 2 deletions(-) > > > > > > > > > > > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c > > > > index 5993f87..22ac3f1 100644 > > > > --- a/fs/xfs/libxfs/xfs_alloc.c > > > > +++ b/fs/xfs/libxfs/xfs_alloc.c > > > > @@ -2702,6 +2702,13 @@ xfs_free_extent( > > > > > > > > ASSERT(len != 0); > > > > > > > > + trace_xfs_bmap_free_deferred(mp, agno, 0, agbno, len); > > > > + > > > > > > Hmm, but the bmap code isn't the only caller here. I was thinking that > > > maybe we'd be better served by pushing these down into xfs_defer_add() > > > and friends, but I guess we don't necessarily have the extent > > > information at that layer. > > > > Correct, we don't. > > > > > How about we just rename these tracepoints to match the function names > > > so they don't confuse me in the future? :) > > > > I broke with the function name convention so that the entry and exit > > tracepoints to deferred items would all have names that easily matched > > wildcards to make my life easier: > > > > # trace-cmd record -e 'xfs_*_defer' -e 'xfs_*_deferred' -F ... > > > > The xfs_bmap_free_defer tp seems reasonable, but xfs_bmap_free_deferred > doesn't really make sense when called via other places where nothing has > been deferred. > > I'm not totally sure I follow what the goal is with this tracepoint wrt > to naming that the trace_xfs_defer_*() tracepoints don't already achieve > (combined with standard infrastructure tracepoints), but if the name is > important, we should at least put it somewhere where it's only triggered > via a deferred operation (e.g., xfs_extent_free_finish_item()). Crap, you're right, the tp is in the wrong place. xfs_trans_free_extent() it is. Might as well rename them to xfs_extent_free_defer* while I'm at it. --D > > > > > + if (XFS_TEST_ERROR(false, mp, > > > > + XFS_ERRTAG_FREE_EXTENT, > > > > + XFS_RANDOM_FREE_EXTENT)) > > > > + return -EIO; > > > > + > > > > error = xfs_free_extent_fix_freelist(tp, agno, &agbp); > > > > if (error) > > > > return error; > > > > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > > > > index 540a6b7..8e14ff4 100644 > > > > --- a/fs/xfs/libxfs/xfs_bmap.c > > > > +++ b/fs/xfs/libxfs/xfs_bmap.c > > > > @@ -596,6 +596,8 @@ xfs_bmap_add_free( > > > > new = kmem_zone_alloc(xfs_bmap_free_item_zone, KM_SLEEP); > > > > new->xefi_startblock = bno; > > > > new->xefi_blockcount = (xfs_extlen_t)len; > > > > + trace_xfs_bmap_free_defer(mp, XFS_FSB_TO_AGNO(mp, bno), 0, > > > > + XFS_FSB_TO_AGBNO(mp, bno), len); > > > > xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_FREE, &new->xefi_list); > > > > } > > > > > > > > diff --git a/fs/xfs/xfs_error.h b/fs/xfs/xfs_error.h > > > > index 2e4f67f..da6f951 100644 > > > > --- a/fs/xfs/xfs_error.h > > > > +++ b/fs/xfs/xfs_error.h > > > > @@ -90,7 +90,8 @@ extern void xfs_verifier_error(struct xfs_buf *bp); > > > > #define XFS_ERRTAG_STRATCMPL_IOERR 19 > > > > #define XFS_ERRTAG_DIOWRITE_IOERR 20 > > > > #define XFS_ERRTAG_BMAPIFORMAT 21 > > > > -#define XFS_ERRTAG_MAX 22 > > > > +#define XFS_ERRTAG_FREE_EXTENT 22 > > > > +#define XFS_ERRTAG_MAX 23 > > > > > > > > /* > > > > * Random factors for above tags, 1 means always, 2 means 1/2 time, etc. > > > > @@ -117,6 +118,7 @@ extern void xfs_verifier_error(struct xfs_buf *bp); > > > > #define XFS_RANDOM_STRATCMPL_IOERR (XFS_RANDOM_DEFAULT/10) > > > > #define XFS_RANDOM_DIOWRITE_IOERR (XFS_RANDOM_DEFAULT/10) > > > > #define XFS_RANDOM_BMAPIFORMAT XFS_RANDOM_DEFAULT > > > > +#define XFS_RANDOM_FREE_EXTENT 1 > > > > > > > > > > Why not XFS_RANDOM_DEFAULT? > > > > I don't want the injected redo errors going off at random -- I want to set > > one and have it go off the very next time we hit it. This way I can write > > the xfstests like so: > > > > mkfs/mount > > write to a file; sync > > set a logic bomb for the next time we free an extent > > truncate the file > > > > unmount > > check that xfs_repair grumbles about the dirty log > > mount > > check the file > > > > Were the free-extent bomb set to go off at XFS_RANDOM_DEFAULT intervals, it'd > > only have a 1/100 chance of triggering, which makes it harder to test. > > > > Ok. > > Brian > > > --D > > > > > > > > Brian > > > > > > > #ifdef DEBUG > > > > extern int xfs_error_test_active; > > > > diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h > > > > index a45b030..939caf5 100644 > > > > --- a/fs/xfs/xfs_trace.h > > > > +++ b/fs/xfs/xfs_trace.h > > > > @@ -2417,9 +2417,12 @@ DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_cancel); > > > > DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_finish); > > > > DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_abort); > > > > > > > > -DEFINE_PHYS_EXTENT_DEFERRED_EVENT(xfs_defer_phys_extent); > > > > DEFINE_MAP_EXTENT_DEFERRED_EVENT(xfs_defer_map_extent); > > > > > > > > +#define DEFINE_BMAP_FREE_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT > > > > +DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_defer); > > > > +DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_deferred); > > > > + > > > > #endif /* _TRACE_XFS_H */ > > > > > > > > #undef TRACE_INCLUDE_PATH > > > > > > > > _______________________________________________ > > > > xfs mailing list > > > > xfs@oss.sgi.com > > > > http://oss.sgi.com/mailman/listinfo/xfs From tinguely@sgi.com Tue Aug 2 17:47:33 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AA4E97CA1 for ; Tue, 2 Aug 2016 17:47:33 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.106.9]) by relay3.corp.sgi.com (Postfix) with ESMTP id 117D5AC001 for ; Tue, 2 Aug 2016 15:47:33 -0700 (PDT) Received: from eagdhcp-232-200.americas.sgi.com (128.162.232.200) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.3.224.2; Tue, 2 Aug 2016 17:47:32 -0500 Message-ID: <57A12305.7020506@sgi.com> Date: Tue, 2 Aug 2016 17:47:33 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Subject: Re: [PATCH] xfs: in _attrlist_by_handle, copy the cursor back to userspace References: <20160802035651.GB8593@birch.djwong.org> <20160802122517.GD31492@infradead.org> <20160802154035.GI8590@birch.djwong.org> <20160802214101.GM16044@dastard> In-Reply-To: <20160802214101.GM16044@dastard> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.232.200] On 08/02/16 16:41, Dave Chinner wrote: > On Tue, Aug 02, 2016 at 08:40:35AM -0700, Darrick J. Wong wrote: >> On Tue, Aug 02, 2016 at 05:25:17AM -0700, Christoph Hellwig wrote: >>> On Mon, Aug 01, 2016 at 08:56:51PM -0700, Darrick J. Wong wrote: >>>> When we're iterating inode xattrs by handle, we have to copy the >>>> cursor back to userspace so that a subsequent invocation actually >>>> retrieves subsequent contents. >>> Testcase? >> Found it while continuing development of xfs_scrub. I'll send along the >> xfstest patch when I've finished polishing it. (It was harder than usual since >> xfs_io doesn't /use/ the attr-by-handle interface... nothing does.) > It was (and probably still is) used by SGI's HSM. I thought there > was some coverage of the interface in the dmapi part of the xfstests > suite, but perhaps it's only tested by SGI's internal hsm test > suite... > > Cheers, > > Dave. You may be thinking of the DMAPI specific extended attribute interface and that is tested in xfstests. That function cannot cursor. This change would be appropriate to xfsdump (dumping extended attributes via jdm_attr_list()) than our HSM. I don't see a SGI test for attr_list_by_handle() nor jdm_attr_list(). There is mention in the xfstests source file src/open_unlink.c but that does not cursor. --Mark Tinguely. From smpessoa@terra.com.br Tue Aug 2 17:59:42 2016 Return-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.8 required=5.0 tests=FREEMAIL_FROM, HTML_IMAGE_ONLY_24,HTML_MESSAGE,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 197647CA4 for ; Tue, 2 Aug 2016 17:59:42 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7F299AC003 for ; Tue, 2 Aug 2016 15:59:41 -0700 (PDT) X-ASG-Debug-ID: 1470178777-0bf57b369e35cd30001-NocioJ Received: from if06-mail-fb07-mia.mta.terra.com (if06-mail-fb07-mia.mta.terra.com [208.84.243.201]) by cuda.sgi.com with ESMTP id O2wG5dAGFQwmrTCa for ; Tue, 02 Aug 2016 15:59:38 -0700 (PDT) X-Barracuda-Envelope-From: smpessoa@terra.com.br X-Barracuda-Effective-Source-IP: if06-mail-fb07-mia.mta.terra.com[208.84.243.201] X-Barracuda-Apparent-Source-IP: 208.84.243.201 Received: from mail-smtp05-mia.tpn.terra.com (unknown [10.235.200.48]) by mail-fb07-mia.tpn.terra.com (Postfix) with ESMTP id 7446F18248C08; Tue, 2 Aug 2016 22:59:37 +0000 (UTC) X-Terra-Karma: -2% X-Terra-Hash: ecc457f0803b1a6caaf103c0d87d978e Received: from lywa.com (unknown [177.39.37.148]) (authenticated user smpessoa@terra.com.br) by mail-smtp05-mia.tpn.terra.com (Postfix) with ESMTPA id 9571AB6; Tue, 2 Aug 2016 22:59:33 +0000 (UTC) From: Cyril Brulebois To: "Miles Fidelman" , "793495" <793495@bugs.debian.org>, "xfs" , "751731" <751731@bugs.debian.org> Subject: =?utf-8?B?cGVyZmVjdCB3b3Jkcw==?= Date: Wed, 3 Aug 2016 01:59:24 +0300 X-ASG-Orig-Subj: =?utf-8?B?cGVyZmVjdCB3b3Jkcw==?= Message-ID: <00002682e82f$5b20b92d$f5b21933$@free.fr> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0001_301B2FA8.3A63124D" X-Mailer: Microsoft Outlook 16.0 Thread-Index: AdH+2AeWubtvXfga3guEyuxaHGiwzA== Content-Language: en-us X-CMAE-Score: 0 X-Barracuda-Connect: if06-mail-fb07-mia.mta.terra.com[208.84.243.201] X-Barracuda-Start-Time: 1470178778 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2504 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.29 X-Barracuda-Spam-Status: No, SCORE=1.29 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, HTML_IMAGE_ONLY_24, HTML_IMAGE_ONLY_24_2, HTML_MESSAGE, THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31702 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 HTML_IMAGE_ONLY_24 BODY: HTML: images with 2000-2400 bytes of words 0.00 HTML_MESSAGE BODY: HTML included in message 1.28 HTML_IMAGE_ONLY_24_2 HTML: images with 2000-2400 bytes of words This is a multipart message in MIME format. ------=_NextPart_000_0001_301B2FA8.3A63124D Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgZnJpZW5kISANCkkgd2FzIHJlYWRpbmcgIGFuIGFydGljbGUgYW5kIHN1ZGRlbmx5IGNhbWUg YWNjcm9zcyB0aG9zZSB3b3JkcywgdGhleSBhcmUganVzdCBwZXJmZWN0LCB5b3UgIGNhbiBmaW5k IHRoZSBhcnRpY2xlIGhlcmUgIDxodHRwOi8vaW52aXRlLnRoZWd1eWdlYXIuY29tL2U0emJoZ3U+ DQpDaGVlcnMsIEN5cmlsIEJydWxlYm9pcw0K ------=_NextPart_000_0001_301B2FA8.3A63124D Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable

<= span lang=3DEN-US>Hi friend!

I was reading an article and suddenly came accro= ss those words, they are just perfect, you can find the article here = http://invite.theguy= gear.com/e4zbhgu

Cheers, Cyril Brulebois

 

------=_NextPart_000_0001_301B2FA8.3A63124D-- From david@fromorbit.com Tue Aug 2 18:15:08 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 D6C1E7CA4 for ; Tue, 2 Aug 2016 18:15:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8BF72304032 for ; Tue, 2 Aug 2016 16:15:05 -0700 (PDT) X-ASG-Debug-ID: 1470179702-0bf8157e6a3dc580001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id BRttCv8KmuivUVga for ; Tue, 02 Aug 2016 16:15:02 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Effective-Source-IP: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2B2BQDoJ6FXEMmOLHldg0WBUoZynTsGjF+GDYIPgX2GFwICAQECgT45FAEBAQEBAQEGAQEBAQEBAQE2QIRfAQU6HCMQCAMOCgklDwUlAwcaE4gwvn4BAQEHAgEkHoVEhRWKGwWZM451j0mMMIN3HoRCKjKIMQEBAQ Received: from ppp121-44-142-201.lns20.syd7.internode.on.net (HELO dastard) ([121.44.142.201]) by ipmail05.adl6.internode.on.net with ESMTP; 03 Aug 2016 08:45:01 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1bUitp-0007El-2U; Wed, 03 Aug 2016 09:15:01 +1000 Date: Wed, 3 Aug 2016 09:15:01 +1000 From: Dave Chinner To: Zorro Lang Cc: fstests@vger.kernel.org, sandeen@redhat.com, eguan@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH] xfs/006: add EIO error handling test Message-ID: <20160802231501.GO12670@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs/006: add EIO error handling test References: <1469976234-15121-1-git-send-email-zlang@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1469976234-15121-1-git-send-email-zlang@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1470179702 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1756 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31703 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Sun, Jul 31, 2016 at 10:43:54PM +0800, Zorro Lang wrote: > Except fail_at_unmount, all EIO error handling can stop umount hanging > on IO error too. This case only tested fail_at_unmount before, so add > EIO/max_retries and EIO/retry_timeout_seconds test. > > Now this case test three situation when unmount hit EIO: > 1) fail_at_unmount=1 && \ > EIO/max_retries=-1 && \ > EIO/retry_timeout_seconds=0 > > 2) fail_at_unmount=0 && \ > EIO/max_retries=1 && \ > EIO/retry_timeout_seconds=0 > > 3) fail_at_unmount=0 && \ > EIO/max_retries=-1 && \ > EIO/retry_timeout_seconds=1 > > Signed-off-by: Zorro Lang > --- > > Hi, > > There're three patches from Eric fix XFS error handling bugs: > 5539d36 xfs: don't reset b_retries to 0 on every failure > 0b4db5d xfs: remove extraneous buffer flag changes > e97f6c5 xfs: fix xfs_error_get_cfg for negative errnos > > Without these patches, configurable error handling cannot be properly > set, and once set is not honored. > > For test part of this bug, add EIO error handling test into xfs/006. > The kernel with above 3 patches shouldn't hang on xfs/006. > > I haven't got an idea about how to test ENOSPC and default error > handling. So use EIO test to prove above patches can work well > on EIO handling at least. Can you put this into a new test? We don't tend to extend tests to add new cases, we add new tests instead. Factor the common parts of the tests into generic functions in common/ somewhere and call them from each test. This way adding new test cases doesn't cause tests that previously passed to fail and hence signal false regressions. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Aug 2 18:23:14 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 2BD377CA4 for ; Tue, 2 Aug 2016 18:23:14 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 93031AC002 for ; Tue, 2 Aug 2016 16:23:10 -0700 (PDT) X-ASG-Debug-ID: 1470180187-0bf57c136a2ffc80001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id geQhoOOjAhFmrAEf for ; Tue, 02 Aug 2016 16:23:07 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Effective-Source-IP: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2B2BQB+KqFXEMmOLHldg0WBUoZynTsGjF+GDYIPgX2GFwICAQECgT45FAEBAQEBAQEGAQEBAQEBAQE2QIRfAQU6HCMQCAMOCgklDwUlAwcaE4gwvn8BAQEBBgIBJB6FRIUVihsFjhaFWoVDjnWBdYgLhUmGZIVMg3cehEIqMogxAQEB Received: from ppp121-44-142-201.lns20.syd7.internode.on.net (HELO dastard) ([121.44.142.201]) by ipmail05.adl6.internode.on.net with ESMTP; 03 Aug 2016 08:53:06 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1bUj1d-0007Fb-QH; Wed, 03 Aug 2016 09:23:05 +1000 Date: Wed, 3 Aug 2016 09:23:05 +1000 From: Dave Chinner To: Christoph Hellwig Cc: fstests@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH] generic/095: update warning whitelist Message-ID: <20160802232305.GQ12670@dastard> X-ASG-Orig-Subj: Re: [PATCH] generic/095: update warning whitelist References: <1470042176-31447-1-git-send-email-hch@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1470042176-31447-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: 1470180187 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1306 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31704 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Mon, Aug 01, 2016 at 11:02:56AM +0200, Christoph Hellwig wrote: > The recent direct I/O path refactor changed the function name in the > racing read case. Update the test case to handle the new name in > addition to the old one. > > Signed-off-by: Christoph Hellwig > --- > tests/generic/095 | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/tests/generic/095 b/tests/generic/095 > index c656ef1..4754992 100755 > --- a/tests/generic/095 > +++ b/tests/generic/095 > @@ -125,9 +125,11 @@ $FIO_PROG $fio_config >>$seqres.full 2>&1 > filter_xfs_dmesg() > { > local warn1="WARNING:.*fs/xfs/xfs_file\.c:.*xfs_file_dio_aio_write.*" > - local warn2="WARNING:.*fs/xfs/xfs_file\.c:.*xfs_file_read_iter.*" > + local warn2="WARNING:.*fs/xfs/xfs_file\.c:.*xfs_file_dio_aio_read.*" > + local warn3="WARNING:.*fs/xfs/xfs_file\.c:.*xfs_file_read_iter.*" > sed -e "s#$warn1#Intentional warnings in xfs_file_dio_aio_write#" \ > - -e "s#$warn2#Intentional warnings in xfs_file_read_iter#" > + -e "s#$warn2#Intentional warnings in xfs_file_dio_aio_read#" \ > + -e "s#$warn3#Intentional warnings in xfs_file_read_iter#" > } Looks fine. Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From dave@fromorbit.com Tue Aug 2 18:41:17 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 635A47CA4 for ; Tue, 2 Aug 2016 18:41:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 27EF18F8033 for ; Tue, 2 Aug 2016 16:41:13 -0700 (PDT) X-ASG-Debug-ID: 1470181271-0bf57c1369301320001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id IiFWAWn1tWPHui2j for ; Tue, 02 Aug 2016 16:41:12 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Effective-Source-IP: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BiFQAoL6FXIMmOLHldg0WBA0+Gcp07BpJsgg+JWjkUAQEBAQEBAQYBAQEBAQE4QEEQAYQ6LyMYGGoDBy2IML8vhWKJJQ1vhHIdBZkzjwGBaYgLhUcChmSJQx6BdwELAYI+KjKGagIBJYEfAQEB Received: from ppp121-44-142-201.lns20.syd7.internode.on.net (HELO dastard) ([121.44.142.201]) by ipmail05.adl6.internode.on.net with ESMTP; 03 Aug 2016 09:10:46 +0930 Received: from disappointment.disaster.area ([192.168.1.110] helo=disappointment) by dastard with esmtp (Exim 4.80) (envelope-from ) id 1bUjIk-0007HW-7Z; Wed, 03 Aug 2016 09:40:46 +1000 Received: from dave by disappointment with local (Exim 4.87) (envelope-from ) id 1bUjIQ-0005SL-I6; Wed, 03 Aug 2016 09:40:26 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: jack@suse.cz Subject: [PATCH] xfs: don't invalidate whole file on DAX read/write Date: Wed, 3 Aug 2016 09:40:26 +1000 X-ASG-Orig-Subj: [PATCH] xfs: don't invalidate whole file on DAX read/write Message-Id: <1470181226-20935-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 2.8.0.rc3 X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1470181271 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1781 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31704 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When we do DAX IO, we try to invalidate the entire page cache held on the file. This is incorrect as it will trash the entire mapping tree that now tracks dirty state in exceptional entries in the radix tree slots. What we are trying to do is remove cached pages (e.g from reads into holes) that sit in the radix tree over the range we are about to write to. Hence we should just limit the invalidation to the range we are about to overwrite. Reported-by: Jan Kara Signed-off-by: Dave Chinner --- fs/xfs/xfs_file.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index ed95e5b..e612a02 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -741,9 +741,20 @@ xfs_file_dax_write( * page is inserted into the pagecache when we have to serve a write * fault on a hole. It should never be dirtied and can simply be * dropped from the pagecache once we get real data for the page. + * + * XXX: This is racy against mmap, and there's nothing we can do about + * it. dax_do_io() should really do this invalidation internally as + * it will know if we've allocated over a holei for this specific IO and + * if so it needs to update the mapping tree and invalidate existing + * PTEs over the newly allocated range. Remove this invalidation when + * dax_do_io() is fixed up. */ if (mapping->nrpages) { - ret = invalidate_inode_pages2(mapping); + loff_t end = iocb->ki_pos + iov_iter_count(from) - 1; + + ret = invalidate_inode_pages2_range(mapping, + iocb->ki_pos >> PAGE_SHIFT, + end >> PAGE_SHIFT); WARN_ON_ONCE(ret); } -- 2.8.0.rc3 From david@fromorbit.com Tue Aug 2 18:42:53 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 E793B7CA4 for ; Tue, 2 Aug 2016 18:42:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6A451AC002 for ; Tue, 2 Aug 2016 16:42:52 -0700 (PDT) X-ASG-Debug-ID: 1470181369-0bf8157e6d3df630001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id jzMNgW5NA591nNjC for ; Tue, 02 Aug 2016 16:42:49 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Effective-Source-IP: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2ALDQAoL6FXIMmOLHldg0WBUoZynTsGjF+IHIF9hhcEAgKBPjoTAQEBAQEBAQYBAQEBAQE4QIRfAQUnExwjEAgDDgoJJQ8FJQMHGhOIML5+AQslHoVEhRWKGwEEk3CFQ451j0mMMIN3HwGEQCoyiDEBAQE Received: from ppp121-44-142-201.lns20.syd7.internode.on.net (HELO dastard) ([121.44.142.201]) by ipmail05.adl6.internode.on.net with ESMTP; 03 Aug 2016 09:12:48 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1bUjKh-0007Hj-UK; Wed, 03 Aug 2016 09:42:47 +1000 Date: Wed, 3 Aug 2016 09:42:47 +1000 From: Dave Chinner To: Christoph Hellwig Cc: rpeterso@redhat.com, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: iomap infrastructure and multipage writes V5 Message-ID: <20160802234247.GO16044@dastard> X-ASG-Orig-Subj: Re: iomap infrastructure and multipage writes V5 References: <1464792297-13185-1-git-send-email-hch@lst.de> <20160628002649.GI12670@dastard> <20160630172239.GA23082@lst.de> <20160718111400.GC16044@dastard> <20160718111851.GD16044@dastard> <20160731191900.GA29301@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160731191900.GA29301@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: 1470181369 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 1406 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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.31704 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Sun, Jul 31, 2016 at 09:19:00PM +0200, Christoph Hellwig wrote: > Now after spending this much time I've started wondering why we even > reserve blocks in xfs_iomap_write_allocate - after all we've reserved > space for the actual data blocks and the indlen worst case in > xfs_bmapi_reserve_delalloc. And in fact a little hack to drop that > reservation seems to solve both the root cause (depleted reserved pool) > and the cleanup mess. I just haven't spend enought time to convince > myself that it's actually safe, and in fact looking at the allocator > makes me thing it only works by accident currently despite generally > postive test results. > > Here is the quick patch if anyone wants to chime in: > > diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c > index 620fc91..67c317f 100644 > --- a/fs/xfs/xfs_iomap.c > +++ b/fs/xfs/xfs_iomap.c > @@ -717,7 +717,7 @@ xfs_iomap_write_allocate( > > nimaps = 0; > while (nimaps == 0) { > - nres = XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK); > + nres = 0; // XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK); > > error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, nres, > 0, XFS_TRANS_RESERVE, &tp); > This solves the problem for me, and from history appears to be the right thing to do. Christoph, can you send a proper patch for this? Cheers, Dave. -- Dave Chinner david@fromorbit.com From darrick.wong@oracle.com Tue Aug 2 18:53:31 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D9BCA7CA4 for ; Tue, 2 Aug 2016 18:53:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 903A38F8033 for ; Tue, 2 Aug 2016 16:53:31 -0700 (PDT) X-ASG-Debug-ID: 1470182007-0bf8157e6c3dfd30001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id cE1J6u3CH93K8M59 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 16:53:27 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u72Nr2YT020828 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Aug 2016 23:53:02 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0022.oracle.com (8.14.4/8.13.8) with ESMTP id u72Nr2pi022185 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 23:53:02 GMT Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id u72Nqs6l014229; Tue, 2 Aug 2016 23:53:00 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 02 Aug 2016 16:52:54 -0700 Date: Tue, 2 Aug 2016 16:52:51 -0700 From: "Darrick J. Wong" To: david@fromorbit.com, eguan@redhat.com Cc: linux-btrfs@vger.kernel.org, fstests@vger.kernel.org, xfs@oss.sgi.com, Christoph Hellwig Subject: [PATCH] xfs: test attr_list_by_handle cursor iteration Message-ID: <20160802235251.GB8586@birch.djwong.org> X-ASG-Orig-Subj: [PATCH] xfs: test attr_list_by_handle cursor iteration MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1470182007 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.157.11:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 8719 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31704 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Apparently the XFS attr_list_by_handle ioctl has never actually copied the cursor contents back to user space, which means that iteration has never worked. Add a test case for this and see the patch "xfs: in _attrlist_by_handle, copy the cursor back to userspace". Signed-off-by: Darrick J. Wong --- src/Makefile | 3 - src/attr-list-by-handle-cursor-test.c | 186 +++++++++++++++++++++++++++++++++ tests/xfs/700 | 64 +++++++++++ tests/xfs/700.out | 5 + tests/xfs/group | 1 5 files changed, 258 insertions(+), 1 deletion(-) create mode 100644 src/attr-list-by-handle-cursor-test.c create mode 100755 tests/xfs/700 create mode 100644 tests/xfs/700.out diff --git a/src/Makefile b/src/Makefile index 1bf318b..ae06d50 100644 --- a/src/Makefile +++ b/src/Makefile @@ -20,7 +20,8 @@ LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize preallo_rw_pattern_reader \ bulkstat_unlink_test_modified t_dir_offset t_futimens t_immutable \ stale_handle pwrite_mmap_blocked t_dir_offset2 seek_sanity_test \ seek_copy_test t_readdir_1 t_readdir_2 fsync-tester nsexec cloner \ - renameat2 t_getcwd e4compact test-nextquota punch-alternating + renameat2 t_getcwd e4compact test-nextquota punch-alternating \ + attr-list-by-handle-cursor-test SUBDIRS = diff --git a/src/attr-list-by-handle-cursor-test.c b/src/attr-list-by-handle-cursor-test.c new file mode 100644 index 0000000..5aef79c --- /dev/null +++ b/src/attr-list-by-handle-cursor-test.c @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2016 Oracle. All Rights Reserved. + * + * Author: Darrick J. Wong + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ATTRBUFSZ 1024 +#define BSTATBUF_SZ 1024 + +/* Read all the extended attributes of a file handle. */ +void +read_handle_xattrs( + struct xfs_handle *handle, + bool root_space) +{ + struct attrlist_cursor cur; + char attrbuf[ATTRBUFSZ]; + char *firstname = NULL; + struct attrlist *attrlist = (struct attrlist *)attrbuf; + struct attrlist_ent *ent; + int i; + int flags = 0; + int error; + + if (root_space) + flags |= ATTR_ROOT; + + memset(&cur, 0, sizeof(cur)); + while ((error = attr_list_by_handle(handle, sizeof(*handle), + attrbuf, ATTRBUFSZ, flags, + &cur)) == 0) { + for (i = 0; i < attrlist->al_count; i++) { + ent = ATTR_ENTRY(attrlist, i); + + if (i != 0) + continue; + + if (firstname == NULL) { + firstname = malloc(ent->a_valuelen); + memcpy(firstname, ent->a_name, ent->a_valuelen); + } else { + if (memcmp(firstname, ent->a_name, + ent->a_valuelen) == 0) + fprintf(stderr, + "Saw duplicate xattr \"%s\", buggy XFS?\n", + ent->a_name); + else + fprintf(stderr, + "Test passes.\n"); + goto out; + } + } + + if (!attrlist->al_more) + break; + } + +out: + if (firstname) + free(firstname); + if (error) + perror("attr_list_by_handle"); + return; +} + +/* Iterate a range of inodes. */ +void +find_inode( + struct xfs_handle *fshandle, + int fd, + ino_t ino) +{ + struct xfs_fsop_bulkreq bulkreq; + struct xfs_bstat *bstatbuf; + struct xfs_bstat *p; + struct xfs_bstat *endp; + struct xfs_handle handle; + __u64 first_ino = ino & ~63; + __s32 buflenout = 0; + int error; + + bstatbuf = malloc(BSTATBUF_SZ * sizeof(struct xfs_bstat)); + if (!bstatbuf) { + perror("bulkstat malloc"); + return; + } + + bulkreq.lastip = (__u64 *)&first_ino; + bulkreq.icount = BSTATBUF_SZ; + bulkreq.ubuffer = (void *)bstatbuf; + bulkreq.ocount = &buflenout; + + memcpy(&handle.ha_fsid, fshandle, sizeof(handle.ha_fsid)); + handle.ha_fid.fid_len = sizeof(xfs_fid_t) - + sizeof(handle.ha_fid.fid_len); + handle.ha_fid.fid_pad = 0; + while ((error = xfsctl("", fd, XFS_IOC_FSBULKSTAT, &bulkreq)) == 0) { + if (buflenout == 0) + break; + for (p = bstatbuf, endp = bstatbuf + buflenout; p < endp; p++) { + if (p->bs_ino > ino) { + fprintf(stderr, + "Expected ino %llu, got %llu.\n", + (unsigned long long)ino, p->bs_ino); + goto out; + } + + handle.ha_fid.fid_gen = p->bs_gen; + handle.ha_fid.fid_ino = p->bs_ino; + + read_handle_xattrs(&handle, false); + read_handle_xattrs(&handle, true); + goto out; + } + } + + if (error) + perror("bulkstat"); +out: + free(bstatbuf); + return; +} + +int main( + int argc, + char *argv[]) +{ + struct xfs_handle *fshandle; + size_t fshandle_len; + struct stat sb; + int fd; + int error; + + if (argc != 2) { + fprintf(stderr, "Usage: %s filename\n", argv[0]); + return 1; + } + + error = path_to_fshandle(argv[1], (void **)&fshandle, &fshandle_len); + if (error) { + perror("getting fshandle"); + return 2; + } + + fd = open(argv[1], O_RDONLY); + if (fd < 0) { + perror("opening file"); + return 2; + } + + error = fstat(fd, &sb); + if (error) { + perror("fstat file"); + return 2; + } + + find_inode(fshandle, fd, sb.st_ino); + + close(fd); + free_handle(fshandle, fshandle_len); + return 0; +} diff --git a/tests/xfs/700 b/tests/xfs/700 new file mode 100755 index 0000000..4a5680d --- /dev/null +++ b/tests/xfs/700 @@ -0,0 +1,64 @@ +#! /bin/bash +# FS QA Test No. 700 +# +# Check that attr_list_by_handle copies the cursor back to userspace. +# +#----------------------------------------------------------------------- +# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- + +seq=`basename "$0"` +seqres="$RESULT_DIR/$seq" +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -rf "$tmp".* $TEST_DIR/fsmap $TEST_DIR/testout +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/attr +. ./common/populate + +# real QA test starts here +_supported_os Linux +_require_scratch +_require_test_program "attr-list-by-handle-cursor-test" + +rm -f "$seqres.full" + +echo "Format and mount" +_scratch_mkfs > "$seqres.full" 2>&1 +_scratch_mount + +echo "Stuff file with xattrs" +mkdir $SCRATCH_MNT/foo +__populate_create_attr $SCRATCH_MNT/foo 100 + +echo "Run test program" +./src/attr-list-by-handle-cursor-test $SCRATCH_MNT/foo + +# success, all done +status=0 +exit diff --git a/tests/xfs/700.out b/tests/xfs/700.out new file mode 100644 index 0000000..493a68a --- /dev/null +++ b/tests/xfs/700.out @@ -0,0 +1,5 @@ +QA output created by 700 +Format and mount +Stuff file with xattrs +Run test program +Test passes. diff --git a/tests/xfs/group b/tests/xfs/group index ff0efa5..ae12e74 100644 --- a/tests/xfs/group +++ b/tests/xfs/group @@ -307,3 +307,4 @@ 325 auto quick clone 326 auto quick clone 327 auto quick clone +700 auto quick From darrick.wong@oracle.com Tue Aug 2 18:58:02 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9F3AF7CA4 for ; Tue, 2 Aug 2016 18:58:02 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 162BBAC002 for ; Tue, 2 Aug 2016 16:58:02 -0700 (PDT) X-ASG-Debug-ID: 1470182277-0bf57c1369301c10001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id HvykXRGNvzluGhyz (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 02 Aug 2016 16:57:58 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u72NvYng024041 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 23:57:35 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id u72NvYcp014719 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 2 Aug 2016 23:57:34 GMT Received: from abhmp0007.oracle.com (abhmp0007.oracle.com [141.146.116.13]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id u72NvXQ5005235; Tue, 2 Aug 2016 23:57:34 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 02 Aug 2016 16:57:33 -0700 Date: Tue, 2 Aug 2016 16:57:32 -0700 From: "Darrick J. Wong" To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfs: in _attrlist_by_handle, copy the cursor back to userspace Message-ID: <20160802235732.GD8593@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH] xfs: in _attrlist_by_handle, copy the cursor back to userspace References: <20160802035651.GB8593@birch.djwong.org> <20160802122517.GD31492@infradead.org> <20160802154035.GI8590@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160802154035.GI8590@birch.djwong.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: aserv0022.oracle.com [141.146.126.234] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1470182278 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.15:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 970 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-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, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.31705 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Tue, Aug 02, 2016 at 08:40:35AM -0700, Darrick J. Wong wrote: > On Tue, Aug 02, 2016 at 05:25:17AM -0700, Christoph Hellwig wrote: > > On Mon, Aug 01, 2016 at 08:56:51PM -0700, Darrick J. Wong wrote: > > > When we're iterating inode xattrs by handle, we have to copy the > > > cursor back to userspace so that a subsequent invocation actually > > > retrieves subsequent contents. > > > > Testcase? > > Found it while continuing development of xfs_scrub. I'll send along the > xfstest patch when I've finished polishing it. (It was harder than usual since > xfs_io doesn't /use/ the attr-by-handle interface... nothing does.) Found some extra time while I run all of today's rmap changes through QA to push to Dave, so I fixed (I hope) the remaining problems I had and sent out a testcase. --D > > --D > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From darrick.wong@oracle.com Tue Aug 2 19:13:34 2016 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 ECF4E7CA4 for ; Tue, 2 Aug 2016 19:13:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id A3B37304032 for ; Tue, 2 Aug 2016 17:13:31 -0700 (PDT) X-ASG-Debug-ID: 1470183207-0bf8157e6b3e06d0001-NocioJ Received: from userp10