From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jianpeng Ma" Subject: Re: Re: [patch v2]raid5: fix directio regression Date: Thu, 23 Aug 2012 14:46:59 +0800 Message-ID: <201208231446557815641@gmail.com> References: <201208071421033759628@gmail.com> <201208081321202343795@gmail.com> <201208090919591567972@gmail.com> <20120809113230.152aade3@notabene.brown> <20120814063343.GA30353@kernel.org> <20120815105610.74fe418e@notabene.brown> <20120815014436.GA355@kernel.org> <201208161536313436886@gmail.com> , Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Return-path: Sender: linux-raid-owner@vger.kernel.org To: shli Cc: Neil Brown , linux-raid , axboe List-Id: linux-raid.ids T24gMjAxMi0wOC0yMyAxNDowOCBTaGFvaHVhIExpIDxzaGxpQGtlcm5lbC5vcmc+IFdyb3RlOg0K PjIwMTIvOC8xNiBTaGFvaHVhIExpIDxzaGxpQGtlcm5lbC5vcmc+Og0KPj4gMjAxMi84LzE2IEpp YW5wZW5nIE1hIDxtYWppYW5wZW5nQGdtYWlsLmNvbT46DQo+Pj4gT24gMjAxMi0wOC0xNSAwOTo0 NCBTaGFvaHVhIExpIDxzaGxpQGtlcm5lbC5vcmc+IFdyb3RlOg0KPj4+Pk9uIFdlZCwgQXVnIDE1 LCAyMDEyIGF0IDEwOjU2OjEwQU0gKzEwMDAsIE5laWxCcm93biB3cm90ZToNCj4+Pj4+IE9uIFR1 ZSwgMTQgQXVnIDIwMTIgMTQ6MzM6NDMgKzA4MDAgU2hhb2h1YSBMaSA8c2hsaUBrZXJuZWwub3Jn PiB3cm90ZToNCj4+Pj4+DQo+Pj4+PiA+IE9uIFRodSwgQXVnIDA5LCAyMDEyIGF0IDAxOjA3OjAx UE0gKzA4MDAsIFNoYW9odWEgTGkgd3JvdGU6DQo+Pj4+PiA+ID4gMjAxMi84LzkgTmVpbEJyb3du IDxuZWlsYkBzdXNlLmRlPjoNCj4+Pj4+ID4gPiA+IE9uIFRodSwgOSBBdWcgMjAxMiAwOToyMDow NSArMDgwMCAiSmlhbnBlbmcgTWEiIDxtYWppYW5wZW5nQGdtYWlsLmNvbT4gd3JvdGU6DQo+Pj4+ PiA+ID4gPg0KPj4+Pj4gPiA+ID4+IE9uIDIwMTItMDgtMDggMjA6NTMgU2hhb2h1YSBMaSA8c2hs aUBrZXJuZWwub3JnPiBXcm90ZToNCj4+Pj4+ID4gPiA+PiA+MjAxMi84LzggSmlhbnBlbmcgTWEg PG1hamlhbnBlbmdAZ21haWwuY29tPjoNCj4+Pj4+ID4gPiA+PiA+PiBPbiAyMDEyLTA4LTA4IDEw OjU4IFNoYW9odWEgTGkgPHNobGlAa2VybmVsLm9yZz4gV3JvdGU6DQo+Pj4+PiA+ID4gPj4gPj4+ MjAxMi84LzcgSmlhbnBlbmcgTWEgPG1hamlhbnBlbmdAZ21haWwuY29tPjoNCj4+Pj4+ID4gPiA+ PiA+Pj4+IE9uIDIwMTItMDgtMDcgMTM6MzIgU2hhb2h1YSBMaSA8c2hsaUBrZXJuZWwub3JnPiBX cm90ZToNCj4+Pj4+ID4gPiA+PiA+Pj4+PjIwMTIvOC83IEppYW5wZW5nIE1hIDxtYWppYW5wZW5n QGdtYWlsLmNvbT46DQo+Pj4+PiA+ID4gPj4gPj4+Pj4+IE9uIDIwMTItMDgtMDcgMTE6MjIgU2hh b2h1YSBMaSA8c2hsaUBrZXJuZWwub3JnPiBXcm90ZToNCj4+Pj4+ID4gPiA+PiA+Pj4+Pj4+TXkg ZGlyZWN0SU8gcmFuZG9td3JpdGUgNGsgd29ya2xvYWQgc2hvd3MgYSAxMH4yMCUgcmVncmVzc2lv biBjYXVzZWQgYnkgY29tbWl0DQo+Pj4+PiA+ID4gPj4gPj4+Pj4+Pjg5NWUzYzVjNThhODBiYi4g ZGlyZWN0SU8gdXN1YWxseSBpcyByYW5kb20gSU8gYW5kIGlmIHJlcXVlc3Qgc2l6ZSBpc24ndCBi aWcNCj4+Pj4+ID4gPiA+PiA+Pj4+Pj4+KHdoaWNoIGlzIHRoZSBjb21tb24gY2FzZSksIGRlbGF5 IGhhbmRsaW5nIG9mIHRoZSBzdHJpcGUgaGFzbid0IGFueSBhZHZhbnRhZ2VzLg0KPj4+Pj4gPiA+ ID4+ID4+Pj4+Pj5Gb3IgYmlnIHNpemUgcmVxdWVzdCwgZGVsYXkgY2FuIHN0aWxsIHJlZHVjZSBJ Ty4NCj4+Pj4+ID4gPiA+PiA+Pj4+Pj4+DQo+Pj4+PiA+ID4gPj4gPj4+Pj4+PlNpZ25lZC1vZmYt Ynk6IFNoYW9odWEgTGkgPHNobGlAZnVzaW9uaW8uY29tPg0KPj4+Pj4gPiA+ID4+ID4+Pj4gW3Nu aXBdDQo+Pj4+PiA+ID4gPj4gPj4+Pj4+Pi0tDQo+Pj4+PiA+ID4gPj4gPj4+Pj4+IE1heSBiZSB1 c2VkIHNpemUgdG8ganVkZ2UgaXMgbm90IGEgZ29vZCBtZXRob2QuDQo+Pj4+PiA+ID4gPj4gPj4+ Pj4+IEkgZmlyc3RseSBzZW5kZWQgdGhpcyBwYXRjaCwgb25seSB3YW50IHRvIGNvbnRyb2wgZGly ZWN0LXdyaXRlLWJsb2NrLG5vdCBmb3IgcmVxdWxhciBmaWxlLg0KPj4+Pj4gPiA+ID4+ID4+Pj4+ PiBCZWNhdXNlIGkgdGhpbmsgaWYgc29tZW9uZSB1c2VkIGRpcmVjdC13cml0ZS1ibG9jayBmb3Ig cmFpZDUsaGUgc2hvdWxkIGtub3cgdGhlIGZlYXR1cmUgb2YgcmFpZDUgYW5kIGhlIGNhbiBjb250 cm9sDQo+Pj4+PiA+ID4gPj4gPj4+Pj4+IGZvciB3cml0ZSB0byBmdWxsLXdyaXRlLg0KPj4+Pj4g PiA+ID4+ID4+Pj4+PiBCdXQgYXQgdGhhdCB0aW1lLCBpIGRpZCBrbm93IGhvdyB0byBkaWZmZXJl bnRpYXRlIGJldHdlZW4gcmVndWxhciBmaWxlIGFuZCBibG9jay1kZXZpY2UuDQo+Pj4+PiA+ID4g Pj4gPj4+Pj4+IEkgdGhpayB3ZSBzaG91bGQgZG8gc29tZXRoaW5nIHRvIGRvIHRoaXMuDQo+Pj4+ PiA+ID4gPj4gPj4+Pj4NCj4+Pj4+ID4gPiA+PiA+Pj4+PkkgZG9uJ3QgdGhpbmsgaXQncyBwb3Nz aWJsZSB1c2VyIGNhbiBjb250cm9sIGhpcyB3cml0ZSB0byBiZSBhDQo+Pj4+PiA+ID4gPj4gPj4+ Pj5mdWxsLXdyaXRlIGV2ZW4gZm9yDQo+Pj4+PiA+ID4gPj4gPj4+Pj5yYXcgZGlzayBJTy4gV2h5 IHJlZ3VsYXIgZmlsZSBhbmQgYmxvY2sgZGV2aWNlIGlvIG1hdHRlcnMgaGVyZT8NCj4+Pj4+ID4g PiA+PiA+Pj4+Pg0KPj4+Pj4gPiA+ID4+ID4+Pj4+VGhhbmtzLA0KPj4+Pj4gPiA+ID4+ID4+Pj4+ U2hhb2h1YQ0KPj4+Pj4gPiA+ID4+ID4+Pj4gQW5vdGhlciBwcm9ibGVtIGlzIHRoZSBzaXplLiBI b3cgdG8ganVkZ2UgdGhlIHNpemUgaXMgbGFyZ2Ugb3Igbm90Pw0KPj4+Pj4gPiA+ID4+ID4+Pj4g QSBzeXNjYWxsIHdyaXRlIGlzIGEgZGlvIGFuZCBhIGRpbyBtYXkgYmUgc3BsaXQgbW9yZSBiaW9z Lg0KPj4+Pj4gPiA+ID4+ID4+Pj4gRm9yIG15IHdvcmtsb2FkLCBpIHVzdWFseSB3cml0ZSBjaHVu ay1zaXplLg0KPj4+Pj4gPiA+ID4+ID4+Pj4gQnV0IHlvdXIgcGF0Y2ggaXMganVkZ2UgYnkgYmlv LXNpemUuDQo+Pj4+PiA+ID4gPj4gPj4+DQo+Pj4+PiA+ID4gPj4gPj4+SSdkIGlnbm9yZSB3b3Jr bG9hZCB3aGljaCBkb2VzIHNlcXVlbnRpYWwgZGlyZWN0SU8sIHRob3VnaA0KPj4+Pj4gPiA+ID4+ ID4+PnlvdXIgd29ya2xvYWQgaXMsIGJ1dCBJIGJldCBubyByZWFsIHdvcmtsb2FkcyBhcmUuIFNv IEknZCBsaWtlDQo+Pj4+PiA+ID4gPj4gPj4gU29ycnksbXkgZXhwbGFpbiBtYXliZSBub3QgY29y Y3JlY3QuIEkgd3JpdGUgZGF0YSBvbmNlIHdoaWNoIHNpemUgaXMgYWxtb3N0IGNodW5rcy1zaXpl ICogZGV2aWNlcyxpbiBvcmRlciB0byBmdWxsLXdyaXRlDQo+Pj4+PiA+ID4gPj4gPj4gYW5kIGFz IHBvc3NpYmxlIGFzIHRvIG5vIHByZS1yZWFkIG9wZXJhdGlvbi4NCj4+Pj4+ID4gPiA+PiA+Pj5v bmx5IHRvIGNvbnNpZGVyIGJpZyBzaXplIHJhbmRvbSBkaXJlY3Rpby4gSSBhZ3JlZSB0aGUgc2l6 ZQ0KPj4+Pj4gPiA+ID4+ID4+Pmp1ZGdlIGlzIGFyYml0cmFyeS4gSSBjYW4gb3B0aW1pemUgaXQg dG8gYmUgb25seSBjb25zaWRlciBzdHJpcGUNCj4+Pj4+ID4gPiA+PiA+Pj53aGljaCBoaXRzIHR3 byBvciBtb3JlIGRpc2tzIGluIG9uZSBiaW8sIGJ1dCBub3Qgc3VyZSBpZiBpdCdzDQo+Pj4+PiA+ ID4gPj4gPj4+d29ydGh5IGRvaW5nLiBOb3Qgd2FyZSBiaWcgc2l6ZSBkaXJlY3RpbyBpcyBjb21t b24sIGFuZCBldmVuDQo+Pj4+PiA+ID4gPj4gPj4+aXMsIGJpZyBzaXplIHJlcXVlc3QgSU9QUyBp cyBsb3csIGEgYml0IGRlbGF5IG1heWJlIG5vdCBhIGJpZw0KPj4+Pj4gPiA+ID4+ID4+PmRlYWwu DQo+Pj4+PiA+ID4gPj4gPj4gSWYgYWRkIGEgYWNjX3RpbWUgZm9yICdzdHJpZXBfaGVhZCcgdG8g Y29udHJvbD8NCj4+Pj4+ID4gPiA+PiA+PiBXaGVuIGdldF9hY3RpdmVfc3RyaXBlKCkgaXMgb2ss IHVwZGF0ZSBhY2NfdGltZS4NCj4+Pj4+ID4gPiA+PiA+PiBGb3Igc29tZSB0aW1lLCBzdHJpcGVf aGVhZCBkaWQgbm90IGFjY2VzcyBhbmQgaXQgc2hvbGQgcHJlLXJlYWQuDQo+Pj4+PiA+ID4gPj4g Pg0KPj4+Pj4gPiA+ID4+ID5EbyB5b3Ugd2FudCB0byBhZGQgYSB0aW1lciBmb3IgZWFjaCBzdHJp cGU/IFRoaXMgaXMgZXZlbiB1Z2x5Lg0KPj4+Pj4gPiA+ID4+ID5Ib3cgZG8geW91IGNob29zZSB0 aGUgZXhwaXJlIHRpbWU/IEEgdGltZSB3b3JrcyBmb3IgaGFyZGRpc2sNCj4+Pj4+ID4gPiA+PiA+ ZGVmaW5pdGVseSB3aWxsIG5vdCB3b3JrIGZvciBhIGZhc3QgU1NELg0KPj4+Pj4gPiA+ID4+IEEg dGltZSBpcyBsaWtlIHRoZSBzaXplIHdoaWNoIGlzIGFyYml0cmFyeS4NCj4+Pj4+ID4gPiA+PiBI b3cgYWJvdXQgYWRkIGEgaW50ZXJmYWNlIGluIHN5c2ZzIHRvIGNvbnRyb2wgYnkgdXNlcj8NCj4+ Pj4+ID4gPiA+PiBPbmx5IHVzZXIgY2FuIGp1ZGdlIHRoZSB3b3JrbG9hZCwgd2hpY2ggc2VxdWF0 aWFsIHdyaXRlIG9yIHJhbmRvbSB3cml0ZS4NCj4+Pj4+ID4gPiA+DQo+Pj4+PiA+ID4gPiBUaGlz IGlzIGdldHRpbmcgd29yc2UgYnkgdGhlIG1pbnV0ZS4gIEEgc3lzZnMgaW50ZXJmYWNlIGZvciB0 aGlzIGlzDQo+Pj4+PiA+ID4gPiBkZWZpbml0ZWx5IG5vdCBhIGdvb2QgaWRlYS4NCj4+Pj4+ID4g PiA+DQo+Pj4+PiA+ID4gPiBUaGUgUkVRX05PSURMRSBmbGFnIGlzIGEgcHJldHR5IGNsZWFyIHN0 YXRlbWVudCB0aGF0IG5vIG1vcmUgcmVxdWVzdHMgdGhhdA0KPj4+Pj4gPiA+ID4gbWVyZ2Ugd2l0 aCB0aGlzIG9uZSBhcmUgZXhwZWN0ZWQuICBJZiBzb21lIHVzZSBjYXNlcyBzZW5kcyByYW5kb20g cmVxdWVzdHMsDQo+Pj4+PiA+ID4gPiBtYXliZSBpdCBzaG91bGQgYmUgc2V0dGluZyBSRVFfTk9J RExFLg0KPj4+Pj4gPiA+ID4NCj4+Pj4+ID4gPiA+IE1heWJlIHNvbWVvbmUgc2hvdWxkIGRvIHNv bWUgcmVzZWFyY2ggYW5kIGZpbmQgb3V0IHdoeSBXUklURV9PRElSRUNUIGRvZXNuJ3QNCj4+Pj4+ ID4gPiA+IGluY2x1ZGUgUkVRX05PSURMRS4gIFVuZGVyc3RhbmRpbmcgdGhhdCB3b3VsZCBoZWxw IHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQNCj4+Pj4+ID4gPiA+IHByb2JsZW0uDQo+Pj4+PiA+ID4N Cj4+Pj4+ID4gPiBBIHF1aWNrIHNlYXJjaCBzaG93cyBvbmx5IGNmcS1pb3NjaGVkIHVzZXMgUkVR X05PSURMRS4gSW4NCj4+Pj4+ID4gPiBjZnEsIGEgcXVldWUgaXMgaWRsZWQgdG8gYXZvaWQgbG9z aW5nIGl0cyBzaGFyZS4gUkVRX05PSURMRQ0KPj4+Pj4gPiA+IHRlbGxzIGNmcSB0byBhdm9pZCBp ZGxlLCBzaW5jZSB0aGUgdGFzayB3aWxsIG5vdCBkaXNwYXRjaCBmdXJ0aGVyDQo+Pj4+PiA+ID4g cmVxdWVzdHMgYW55IG1vcmUuIE5vdGUgdGhpcyBpc24ndCBubyBtZXJnZS4NCj4+Pj4+ID4NCj4+ Pj4+ID4gU2luY2UgUkVRX05PSURMRSBoYXMgbm8gcmVsYXRpb25zaGlwIHdpdGggcmVxdWVzdCBt ZXJnZSwgd2UnZCBiZXR0ZXIgcmVtb3ZlIGl0Lg0KPj4+Pj4gPiBJIGNhbWUgb3V0IGEgbmV3IHBh dGNoLCB3aGljaCBkb2Vzbid0IGRlcGVuZCBvbiByZXF1ZXN0IHNpemUgYW55IG1vcmUuIFdpdGgN Cj4+Pj4+ID4gdGhpcyBwYXRjaCwgc2VxdWVudGlhbCBkaXJlY3RpbyB3aWxsIHN0aWxsIGludHJv ZHVjZSB1bm5lY2Vzc2FyeSByYWlkNSBwcmVyZWFkDQo+Pj4+PiA+IChlc3BlY2lhbGx5IGZvciBz bWFsbCBzaXplIElPKSwgYnV0IEkgYmV0IG5vIGFwcCBkb2VzIHNlcXVlbnRpYWwgc21hbGwgc2l6 ZQ0KPj4+Pj4gPiBkaXJlY3RJTy4NCj4+Pj4+ID4NCj4+Pj4+ID4gVGhhbmtzLA0KPj4+Pj4gPiBT aGFvaHVhDQo+Pj4+PiA+DQo+Pj4+PiA+IFN1YmplY3Q6IHJhaWQ1OiBmaXggZGlyZWN0aW8gcmVn cmVzc2lvbg0KPj4+Pj4gPg0KPj4+Pj4gPiBNeSBkaXJlY3RJTyByYW5kb213cml0ZSA0ayB3b3Jr bG9hZCBzaG93cyBhIDEwfjIwJSByZWdyZXNzaW9uIGNhdXNlZCBieSBjb21taXQNCj4+Pj4+ID4g ODk1ZTNjNWM1OGE4MGJiLiBUaGlzIGNvbW1pdCBpc24ndCBmcmllbmRseSBmb3Igc21hbGwgc2l6 ZSByYW5kb20gSU8sIGJlY2F1c2UNCj4+Pj4+ID4gZGVsYXlpbmcgc3VjaCByZXF1ZXN0IGhhc24n dCBhbnkgYWR2YW50YWdlcy4NCj4+Pj4+ID4NCj4+Pj4+ID4gRGlyZWN0SU8gdXN1YWxseSBpcyBy YW5kb20gSU8uIEkgdGhvdWdodCB3ZSBjYW4gaWdub3JlIHJlcXVlc3QgbWVyZ2UgYmV0d2Vlbg0K Pj4+Pj4gPiBiaW9zIGZyb20gZGlmZmVyZW50IGlvX3N1Ym1pdC4gU28gd2Ugb25seSBjb25zaWRl ciBvbmUgYmlvIHdoaWNoIGNhbiBkcml2ZQ0KPj4+Pj4gPiB1bm5lY2Vzc2FyeSBwcmVyZWFkIGlu IHJhaWQ1LCB3aGljaCBpcyBsYXJnZSByZXF1ZXN0LiBJZiBhIGJpbyBpcyBsYXJnZSBlbm91Z2gN Cj4+Pj4+ID4gYW5kIHNvbWUgb2YgaXRzIHN0cmlwZXMgd2lsbCBhY2Nlc3MgdHdvIG9yIG1vcmUg ZGlza3MsIHN1Y2ggc3RyaXBlcyBzaG91bGQgYmUNCj4+Pj4+ID4gZGVsYXllZCB0byBhdm9pZCB1 bm5lY2Vzc2FyeSBwcmVyZWFkIHRpbGwgYmlvIGZvciB0aGUgbGFzdCBkaXNrIG9mIHRoZSBzdHJp cHMNCj4+Pj4+ID4gaXMgYWRkZWQuDQo+Pj4+PiA+DQo+Pj4+PiA+IFJFUV9OT0lETEUgZG9lc24n dCBtZWFuIGFib3V0IHJlcXVlc3QgbWVyZ2UsIEkgZGVsZXRlZCBpdC4NCj4+Pj4+DQo+Pj4+PiBI aSwNCj4+Pj4+ICBIYXZlIHlvdSB0ZXN0ZWQgd2hhdCBlZmZlY3QgdGhpcyBoYXMgb24gbGFyZ2Ug c2VxdWVudGlhbCBkaXJlY3Qgd3JpdGVzPw0KPj4+Pj4gIEJlY2F1c2UgaXQgZG9uJ3QgbWFrZSBz ZW5zZSB0byBtZSBhbmQgSSB3b3VsZCBiZSBzdXJwcmlzZWQgaWYgaXQgaW1wcm92ZXMNCj4+Pj4+ ICB0aGluZ3MuDQo+Pj4+Pg0KPj4+Pj4gIFlvdSBhcmUgZGVsYXlpbmcgc2V0dGluZyB0aGUgU1RS SVBFX1BSRVJFQURfQUNUSVZFIGJpdCB1bnRpbCB5b3UgdGhpbmsgeW91DQo+Pj4+PiAgaGF2ZSBz dWJtaXR0ZWQgYWxsIHRoZSB3cml0ZXMgZnJvbSB0aGlzIGJpbyB0aGF0IGFwcGx5IHRvIHRoZSBn aXZlIHN0cmlwZS4NCj4+Pj4+ICBUaGF0IGRvZXMgbWFrZSBzb21lIHNlbnNlLCBob3dldmVyIGl0 IGRvZXNuJ3Qgc2VlbSB0byBkZWFsIHdpdGggdGhlDQo+Pj4+PiAgcG9zc2liaWxpdHkgdGhhdCB0 aGUgb25lIGJpbyBjb3ZlcnMgcGFydHMgb2YgdHdvIGRpZmZlcmVudCBzdHJpcGVzLiAgSW4gdGhh dA0KPj4+Pj4gIGNhc2UgdGhlIGZpcnN0IHN0cmlwZSBuZXZlciBnZXRzIFNUUklQRV9QUkVSRUFE X0FDVElWRSBzZXQsIHNvIGl0IGlzIGRlbGF5ZWQNCj4+Pj4+ICBkZXNwaXRlIGhhdmluZyAnUkVR X1NZTkMnIHNldC4NCj4+Pj4NCj4+Pj5JIGRpZG4ndCBnZXQgeW91ciBwb2ludC4gSXNuJ3QgbGFz dF9zZWN0b3IgLSBsb2dpY2FsX3NlY3RvciA8IGNodW5rX3NlY3RvcnMgdHJ1ZQ0KPj4+PmluIHRo ZSBjYXNlPw0KPj4+Pg0KPj4+Pj4gIEFsc28sIGFuZCBtb3JlIHNpZ25pZmljYW50bHksIHBsdWdn aW5nIHNob3VsZCBtZWFuIHRoYXQgdGhlIHZhcmlvdXMNCj4+Pj4+ICBzdHJpcGVfaGVhZHMgYXJl IG5vdCBldmVuIGxvb2tlZCBhdCB1bnRpbCBhbGwgb2YgdGhlIG9yaWdpbmFsIGJpbyBpcw0KPj4+ Pj4gIHByb2Nlc3NlZCwgc28gd2hpbGUgU1RSSVBFX1BSRVJFQURfQUNUSVZFIG1pZ2h0IGdldCBz ZXQgZWFybHksIGl0IHNob3VsZCBub3QNCj4+Pj4+ICBnZXQgcHJvY2Vzc2VkIHVudGlsIHRoZSB3 aG9sZSBiaW8gaXMgcHJvY2Vzc2VkIGFuZCB0aGUgcXVldWUgaXMgdW5wbHVnZ2VkLg0KPj4+Pj4N Cj4+Pj4+ICBTbyBJIGRvbid0IHRoaW5rIHRoaXMgcGF0Y2ggc2hvdWxkIG1ha2UgYSBkaWZmZXJl bmNlIG9uIGxhcmdlIGRpcmVjdCB3cml0ZXMsDQo+Pj4+PiAgYW5kIGlmIGl0IGRvZXMgdGhlbiBz b21ldGhpbmcgc3RyYW5nZSBpcyBnb2luZyBvbiB0aGF0IEknZCBsaWtlIHRvDQo+Pj4+PiAgdW5k ZXJzdGFuZCBmaXJzdC4NCj4+Pj4NCj4+Pj5BaGEsIG9rLCB0aGlzIG1ha2VzIHNlbnNlLiByZWNl bnQgZGVsYXllZCBzdHJpcGUgcmVsZWFzZSBzaG91bGQgbWFrZSB0aGUNCj4+Pj5wcm9ibGVtIGdv IGF3YXkuIFNvIEppYW5wZW5nLCBjYW4geW91IHRyeSB5b3VyIHdvcmtsb2FkIHdpdGggdGhlIGNv bW1pdA0KPj4+PnJldmVydGVkIHdpdGggYSByZWNlbnQga2VybmVsIHBsZWFzZT8NCj4+Pj4NCj4+ PiBJIHRlc3RlZCB1c2VkIHlvdXIgcGF0Y2ggaW4gbXkgd29ya2xvYWQuDQo+Pj4gTGlrZSB0aGUg bmVpbCBzYWlkLCB0aGUgcGVyZm9ybWFuY2UgZG9lcyBub3QgcmVncmVzcy4NCj4+PiBCdXQgaWYg dGhlIGNvZGUgaXMgOg0KPj4+PiAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RfYml0KFNU UklQRV9QUkVSRUFEX0FDVElWRSwgJnNoLT5zdGF0ZSkpDQo+Pj4+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlbGVhc2Vfc3RyaXBlKHNoKTsNCj4+Pj4gICAgICAgICAgICAgICAgICAg ICAgIGVsc2UNCj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV9zdHJp cGVfcGx1ZyhtZGRldiwgc2gpOw0KPj4+IFRoZSBzcGVlZCBpcyBhYm91dCA3Nk1CL3MuV2l0aCB0 aG9zZSBjb2RlIHRoZSBzcGVlZCBpcyAyMDBNQi9zLg0KPj4NCj4+IEhtbSwgd2hhdCBJIHdhbnQg dG8gdGVzdCBpcyB1cHN0cmVhbSBrZXJuZWwgd2l0aCBjb21taXQgODk1ZTNjNWM1OGE4MGJiDQo+ PiByZXZlcnRlZC4gZG9uJ3QgYXBwbHkgbXkgcGF0Y2guIFdlIHdhbnQgdG8ganVzdCByZXZlcnQg dGhlIGNvbW1pdC4NCj4NCj5EaWQgeW91IGhhdmUgZGF0YSBmb3IgeW91ciBvcmlnaW5hbCB3b3Jr bG9hZCB3aXRoIDg5NWUzYzVjNThhODBiYg0KPnJldmVydGVkIG5vdz8NCm91ciByYWlkNSB3aGlj aCBoYWQgMTQgU0FUQSBIRERzLg0KDQp3aXRoICA4OTVlM2M1YzU4YTgwYmIgcmV2ZXJ0ZWQ6DQp1 c2luZyBkZCB0byB0ZXN0IDU1TUIvcw0KdXNpbmcgb3VyLWZzIDIwMC0yNTBNYi9zDQoNCndpdGgg IDg5NWUzYzVjNThhODBiYjoNCnVzaW5nIGRkIHRvIHRlc3QgMjc1TUIvcw0KdXNpbmcgb3VyLWZz IDUwMC01NTBNYi9z