From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id o740B33B000978 for ; Tue, 3 Aug 2010 19:11:03 -0500 Received: from e9.ny.us.ibm.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E95A434AB42 for ; Tue, 3 Aug 2010 17:19:21 -0700 (PDT) Received: from e9.ny.us.ibm.com (e9.ny.us.ibm.com [32.97.182.139]) by cuda.sgi.com with ESMTP id CE5VlnGNAYBtzkRB for ; Tue, 03 Aug 2010 17:19:21 -0700 (PDT) Received: from d01relay05.pok.ibm.com (d01relay05.pok.ibm.com [9.56.227.237]) by e9.ny.us.ibm.com (8.14.4/8.13.1) with ESMTP id o73NsLID009178 for ; Tue, 3 Aug 2010 19:54:21 -0400 Received: from d01av04.pok.ibm.com (d01av04.pok.ibm.com [9.56.224.64]) by d01relay05.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o740BKDx133906 for ; Tue, 3 Aug 2010 20:11:20 -0400 Received: from d01av04.pok.ibm.com (loopback [127.0.0.1]) by d01av04.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id o740BJeV016076 for ; Tue, 3 Aug 2010 20:11:20 -0400 Subject: Re: [PATCH] dio: track and serialise unaligned direct IO From: Mingming Cao In-Reply-To: <1280443516-14448-1-git-send-email-david@fromorbit.com> References: <1280443516-14448-1-git-send-email-david@fromorbit.com> Date: Tue, 03 Aug 2010 17:11:18 -0700 Message-ID: <1280880678.2334.27.camel@mingming-laptop> Mime-Version: 1.0 List-Id: XFS Filesystem from SGI List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: xfs-bounces@oss.sgi.com Errors-To: xfs-bounces@oss.sgi.com To: Dave Chinner Cc: linux-fsdevel@vger.kernel.org, sandeen@sandeen.net, xfs@oss.sgi.com T24gRnJpLCAyMDEwLTA3LTMwIGF0IDA4OjQ1ICsxMDAwLCBEYXZlIENoaW5uZXIgd3JvdGU6Cj4g RnJvbTogRGF2ZSBDaGlubmVyIDxkY2hpbm5lckByZWRoYXQuY29tPgo+IAo+IElmIHdlIGdldCB0 d28gdW5hbGlnbmVkIGRpcmVjdCBJTydzIHRvIHRoZSBzYW1lIGZpbGVzeXN0ZW0gYmxvY2sKPiB0 aGF0IGlzIG1hcmtlZCBhcyBhIG5ldyBhbGxvY2F0aW9uIChpLmUuIGJ1ZmZlcl9uZXcpLCB0aGVu IGJvdGggSU9zIHdpbGwKPiB6ZXJvIHRoZSBwb3J0aW9uIG9mIHRoZSBibG9jayB0aGV5IGFyZSBu b3Qgd3JpdGluZyBkYXRhIHRvLiBBcyBhCj4gcmVzdWx0LCB3aGVuIHRoZSBJT3MgY29tcGxldGUg dGhlcmUgd2lsbCBiZSBhIHBvcnRpb24gb2YgdGhlIGJsb2NrCj4gdGhhdCBjb250YWlucyB6ZXJv cyBmcm9tIHRoZSBsYXN0IElPIHRvIGNvbXBsZXRlIHJhdGhlciB0aGFuIHRoZQo+IGRhdGEgdGhh dCBzaG91bGQgYmUgdGhlcmUuCj4gCj4gVGhpcyBpcyBlYXNpbHkgbWFuaWZlc3RlZCBieSBxZW11 IHVzaW5nIGFpbytkaW8gd2l0aCBhbiB1bmFsaWduZWQKPiBndWVzdCBmaWxlc3lzdGVtIC0gZXZl cnkgSU8gaXMgdW5hbGlnbmVkIGFuZCBmaWxleXN0ZW0gY29ycnVwdGlvbiBpcwo+IGVuY291bnRl cmVkIGluIHRoZSBndWVzdCBmaWxlc3lzdGVtLiB4ZnN0ZXN0IDI0MCAoZnJvbSBFcmljIFNhbmRl ZW4pCj4gaXMgYWxzbyBhIHNpbXBsZSByZXByb2R1Y2VyLgo+IAo+IFRvIGF2b2lkIHRoaXMgcHJv YmxlbSwgdHJhY2sgdW5hbGlnbmVkIElPIHRoYXQgdHJpZ2dlcnMgc3ViLWJsb2NrIHplcm9pbmcg YW5kCj4gY2hlY2sgbmV3IGluY29taW5nIHVuYWxpZ25lZCBJTyB0aGF0IHJlcXVpcmUgc3ViLWJs b2NrIHplcm9pbmcgYWdhaW5zdCB0aGF0Cj4gbGlzdC4gSWYgd2UgZ2V0IGFuIG92ZXJsYXAgd2hl cmUgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdW5hbGlnbmVkIElPcyBoaXQgdGhlCj4gc2FtZSBmaWxl c3lzdGVtIGJsb2NrLCB0aGVuIHdlIG5lZWQgdG8gYmxvY2sgdGhlIGluY29taW5nIElPcyB1bnRp bCB0aGUgSU8gdGhhdAo+IGlzIHplcm9pbmcgdGhlIGJsb2NrIGNvbXBsZXRlcy4gVGhlIGJsb2Nr ZWQgSU8gY2FuIHRoZW4gY29udGludWUgd2l0aG91dAo+IG5lZWRpbmcgdG8gZG8gYW55IHplcm9p bmcgYW5kIGhlbmNlIHdvbid0IG92ZXJ3cml0ZSB2YWxpZCBkYXRhIHdpdGggemVyb3MuCj4gCgpU aGlzIHNlZW1zIHRvIGFkZHJlc3MgYm90aCB0d28gSU9zIGFyZSB1bmFsaWduZWQgZGlyZWN0IElP LiBJZiB0aGUgZmlyc3QKSU8gaXMgYWxpZ25lZCBkaXJlY3QgSU8sIHRoZW4gaXQgaXMgbm90IHRy YWNrZWQ/CgpJIGFtIGFsc28gY29uY2VybmVkIGFib3V0IHRoZSBhbGlnbmVkIGRpcmVjdCBJTyBj YXNlLi4uCgoxKSBmaXJzdCB0aHJlYWQgYWlvK2RpbythbGlnbmVkIHdyaXRlIHRvIGEgaG9sZSwg dGhlcmUgaXMgbm8gemVyby1vdXQKc3VibWl0dGVkIGZyb20ga2VybmVsLiBCdXQgdGhlIGhvbGUg cmVtYWlucyBpbml0aWFsaXplZCBiZWZvcmUgYWxsIElPCmNvbXBsZXRlIGFuZCBjb252ZXJ0IGl0 IGZyb20gdW5pbml0aWFsaXplZCBleHRlbnQgdG8gaW5pdGlhbGl6ZWQuCjIpIHNlY29uZCB0aHJl YWQgYWlvK2Rpbyt1bmFsaWduIHdyaXRlIHRvIHRoZSBzYW1lIGhvbGUsIHRoaXMgdGltZSBpdCBp cwp1bmFsaWduZWQuIHNpbmNlIGJ1ZmZlciBpcyBzdGlsbCBuZXcgKG5vdCBjb252ZXJ0ZWQgeWV0 KSwgdGhlIG5ldwppbmNvbWluZyB0aHJlYWQgemVybyBvdXQgcG9ydCBvZiBkYXRhIHRoYXQgZmly c3QgdGhyZWFkIGhhcyB3cml0dGVuIHRvCgpJdCBzZWVtcyB3b3VsZCBuZWVkIHRvIHRyYWNrIGFu eSBkaXJlY3QgSU8gd3JpdHRlbiB0byBhIGhvbGUvdW53cnR0ZW4KZXh0ZW50LyBidWZmZXIgbmV3 LCBub3Qgb25seSB0aGUgdW5hbGlnbmVkIGRpbyAuLi4KCnJlZ2FyZHMsCk1pbmdtaW5nCj4gU2ln bmVkLW9mZi1ieTogRGF2ZSBDaGlubmVyIDxkY2hpbm5lckByZWRoYXQuY29tPgo+IC0tLQo+ICBm cy9kaXJlY3QtaW8uYyB8ICAxNTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLQo+ICAxIGZpbGVzIGNoYW5nZWQsIDE0NiBpbnNlcnRpb25zKCsp LCA2IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9mcy9kaXJlY3QtaW8uYyBiL2ZzL2Rp cmVjdC1pby5jCj4gaW5kZXggYTEwY2I5MS4uNjExNTI0ZSAxMDA2NDQKPiAtLS0gYS9mcy9kaXJl Y3QtaW8uYwo+ICsrKyBiL2ZzL2RpcmVjdC1pby5jCj4gQEAgLTcxLDYgKzcxLDkgQEAgc3RydWN0 IGRpbyB7Cj4gIAl1bnNpZ25lZCBzdGFydF96ZXJvX2RvbmU7CS8qIGZsYWc6IHN1Yi1ibG9ja3Np emUgemVyb2luZyBoYXMKPiAgCQkJCQkgICBiZWVuIHBlcmZvcm1lZCBhdCB0aGUgc3RhcnQgb2Yg YQo+ICAJCQkJCSAgIHdyaXRlICovCj4gKyNkZWZpbmUgTEFTVF9TRUNUT1IgKChzZWN0b3JfdCkt MUxMKQo+ICsJc2VjdG9yX3QgemVyb19ibG9ja19mcm9udDsJLyogZnMgYmxvY2sgd2UgYXJlIHpl cm9pbmcgYXQgZnJvbnQgKi8KPiArCXNlY3Rvcl90IHplcm9fYmxvY2tfcmVhcjsJLyogZnMgYmxv Y2sgd2UgYXJlIHplcm9pbmcgYXQgcmVhciAqLwo+ICAJaW50IHBhZ2VzX2luX2lvOwkJLyogYXBw cm94aW1hdGUgdG90YWwgSU8gcGFnZXMgKi8KPiAgCXNpemVfdAlzaXplOwkJCS8qIHRvdGFsIHJl cXVlc3Qgc2l6ZSAoZG9lc24ndCBjaGFuZ2UpKi8KPiAgCXNlY3Rvcl90IGJsb2NrX2luX2ZpbGU7 CQkvKiBDdXJyZW50IG9mZnNldCBpbnRvIHRoZSB1bmRlcmx5aW5nCj4gQEAgLTEzNSw2ICsxMzgs MTAxIEBAIHN0cnVjdCBkaW8gewo+ICAJc3RydWN0IHBhZ2UgKnBhZ2VzW0RJT19QQUdFU107CS8q IHBhZ2UgYnVmZmVyICovCj4gIH07Cj4gCj4gKwo+ICsvKgo+ICsgKiByZWNvcmQgZnMgYmxvY2tz IHdlIGFyZSBkb2luZyB6ZXJvaW5nIG9uIGluIGEgemVybyBibG9jayBsaXN0Lgo+ICsgKiB1bmFs aWduZWQgSU8gaXMgbm90IHZlcnkgcGVyZm9ybWFudCBhbmQgc28gaXMgcmVsYXRpdmVseSB1bmNv bW1vbiwKPiArICogc28gYSBnbG9iYWwgbGlzdCBzaG91bGQgYmUgc3VmZmljZW50IHRvIHRyYWNr IHRoZW0uCj4gKyAqLwo+ICtzdHJ1Y3QgZGlvX3plcm9fYmxvY2sgewo+ICsJc3RydWN0IGxpc3Rf aGVhZCBkaW9fbGlzdDsJLyogbGlzdCBvZiBpbyBpbiBwcm9ncmVzcyAqLwo+ICsJc2VjdG9yX3QJ emVyb19ibG9jazsJLyogYmxvY2sgYmVpbmcgemVyb2VkICovCj4gKwlzdHJ1Y3QgZGlvCSpkaW87 CQkvKiBvd25lciBkaW8gKi8KPiArCXdhaXRfcXVldWVfaGVhZF90IHdxOwkJLyogTmV3IElPIGJs b2NrIGhlcmUgKi8KPiArCWF0b21pY190CXJlZjsJCS8qIHJlZmVyZW5jZSBjb3VudCAqLwo+ICt9 Owo+ICsKPiArREVGSU5FX1NQSU5MT0NLKGRpb196ZXJvX2Jsb2NrX2xvY2spOwo+ICtMSVNUX0hF QUQoZGlvX3plcm9fYmxvY2tfbGlzdCk7Cj4gKwo+ICsvKgo+ICsgKiBBZGQgYSBmaWxlc3lzdGVt IGJsb2NrIHRvIHRoZSBsaXN0IG9mIGJsb2NrcyB3ZSBhcmUgdHJhY2tpbmcuCj4gKyAqLwo+ICtz dGF0aWMgdm9pZAo+ICtkaW9fc3RhcnRfemVyb19ibG9jayhzdHJ1Y3QgZGlvICpkaW8sIHNlY3Rv cl90IHplcm9fYmxvY2spCj4gK3sKPiArCXN0cnVjdCBkaW9femVyb19ibG9jayAqemI7Cj4gKwo+ ICsJemIgPSBrbWFsbG9jKHNpemVvZigqemIpLCBHRlBfTk9JTyk7Cj4gKwlpZiAoIXpiKQo+ICsJ CXJldHVybjsKPiArCUlOSVRfTElTVF9IRUFEKCZ6Yi0+ZGlvX2xpc3QpOwo+ICsJaW5pdF93YWl0 cXVldWVfaGVhZCgmemItPndxKTsKPiArCXpiLT56ZXJvX2Jsb2NrID0gemVyb19ibG9jazsKPiAr CXpiLT5kaW8gPSBkaW87Cj4gKwlhdG9taWNfc2V0KCZ6Yi0+cmVmLCAxKTsKPiArCj4gKwlzcGlu X2xvY2soJmRpb196ZXJvX2Jsb2NrX2xvY2spOwo+ICsJbGlzdF9hZGQoJnpiLT5kaW9fbGlzdCwg JmRpb196ZXJvX2Jsb2NrX2xpc3QpOwo+ICsJc3Bpbl91bmxvY2soJmRpb196ZXJvX2Jsb2NrX2xv Y2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtkaW9fZHJvcF96ZXJvX2Jsb2NrKHN0cnVj dCBkaW9femVyb19ibG9jayAqemIpCj4gK3sKPiArCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ6 Yi0+cmVmKSkKPiArCQlrZnJlZSh6Yik7Cj4gK30KPiArCj4gKy8qCj4gKyAqIENoZWNrIHdoZXRo ZXIgYSBmaWxlc3lzdGVtIGJsb2NrIGlzIGN1cnJlbnRseSBiZWluZyB6ZXJvZWQsIGFuZCBpZiBp dCBpcwo+ICsgKiB3YWl0IGZvciBpdCB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nLiBJZiB3 ZSB3YWl0ZWQgZm9yIGEgYmxvY2sgYmVpbmcKPiArICogemVyb2VkLCByZXR1cm4gMSB0byBpbmRp Y2F0ZSB0aGF0IHRoZSBibG9jayBpcyBhbHJlYWR5IGluaXRpYWxpc2VkLAo+ICsgKiBvdGhlcndp c2UgcmV0dXJuIDAgdG8gaW5kaWNhdGUgdGhhdCBpdCBuZWVkcyB6ZXJvaW5nLgo+ICsgKi8KPiAr c3RhdGljIGludAo+ICtkaW9fd2FpdF96ZXJvX2Jsb2NrKHN0cnVjdCBkaW8gKmRpbywgc2VjdG9y X3QgemVyb19ibG9jaykKPiArewo+ICsJc3RydWN0IGRpb196ZXJvX2Jsb2NrICp6YjsKPiArCj4g KwlzcGluX2xvY2soJmRpb196ZXJvX2Jsb2NrX2xvY2spOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRy eSh6YiwgJmRpb196ZXJvX2Jsb2NrX2xpc3QsIGRpb19saXN0KSB7Cj4gKwkJaWYgKHpiLT5kaW8t Pmlub2RlICE9IGRpby0+aW5vZGUpCj4gKwkJCWNvbnRpbnVlOwo+ICsJCWlmICh6Yi0+emVyb19i bG9jayAhPSB6ZXJvX2Jsb2NrKQo+ICsJCQljb250aW51ZTsKPiArCQlhdG9taWNfaW5jKCZ6Yi0+ cmVmKTsKPiArCQlzcGluX3VubG9jaygmZGlvX3plcm9fYmxvY2tfbG9jayk7Cj4gKwkJd2FpdF9l dmVudCh6Yi0+d3EsIChsaXN0X2VtcHR5KCZ6Yi0+ZGlvX2xpc3QpKSk7Cj4gKwkJZGlvX2Ryb3Bf emVyb19ibG9jayh6Yik7Cj4gKwkJcmV0dXJuIDE7Cj4gKwl9Cj4gKwlzcGluX3VubG9jaygmZGlv X3plcm9fYmxvY2tfbG9jayk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoKPiArICogQ29t cGxldGUgYSBibG9jayB6ZXJvaW5nIGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIGZvciBpdC4K PiArICovCj4gK3N0YXRpYyB2b2lkIGRpb19lbmRfemVyb19ibG9jayhzdHJ1Y3QgZGlvICpkaW8s IHNlY3Rvcl90IHplcm9fYmxvY2spCj4gK3sKPiArCXN0cnVjdCBkaW9femVyb19ibG9jayAqemI7 Cj4gKwo+ICsJc3Bpbl9sb2NrKCZkaW9femVyb19ibG9ja19sb2NrKTsKPiArCWxpc3RfZm9yX2Vh Y2hfZW50cnkoemIsICZkaW9femVyb19ibG9ja19saXN0LCBkaW9fbGlzdCkgewo+ICsJCWlmICh6 Yi0+ZGlvLT5pbm9kZSAhPSBkaW8tPmlub2RlKQo+ICsJCQljb250aW51ZTsKPiArCQlpZiAoemIt Pnplcm9fYmxvY2sgIT0gemVyb19ibG9jaykKPiArCQkJY29udGludWU7Cj4gKwkJbGlzdF9kZWxf aW5pdCgmemItPmRpb19saXN0KTsKPiArCQlzcGluX3VubG9jaygmZGlvX3plcm9fYmxvY2tfbG9j ayk7Cj4gKwkJd2FrZV91cCgmemItPndxKTsKPiArCQlkaW9fZHJvcF96ZXJvX2Jsb2NrKHpiKTsK PiArCQlyZXR1cm47Cj4gKwl9Cj4gKwlzcGluX3VubG9jaygmZGlvX3plcm9fYmxvY2tfbG9jayk7 Cj4gK30KPiArCj4gIC8qCj4gICAqIEhvdyBtYW55IHBhZ2VzIGFyZSBpbiB0aGUgcXVldWU/Cj4g ICAqLwo+IEBAIC0yNTMsNiArMzUxLDExIEBAIHN0YXRpYyBpbnQgZGlvX2NvbXBsZXRlKHN0cnVj dCBkaW8gKmRpbywgbG9mZl90IG9mZnNldCwgaW50IHJldCwgYm9vbCBpc19hc3luYykKPiAgCQlh aW9fY29tcGxldGUoZGlvLT5pb2NiLCByZXQsIDApOwo+ICAJfQo+IAo+ICsJaWYgKGRpby0+emVy b19ibG9ja19mcm9udCAhPSBMQVNUX1NFQ1RPUikKPiArCQlkaW9fZW5kX3plcm9fYmxvY2soZGlv LCBkaW8tPnplcm9fYmxvY2tfZnJvbnQpOwo+ICsJaWYgKGRpby0+emVyb19ibG9ja19yZWFyICE9 IExBU1RfU0VDVE9SKQo+ICsJCWRpb19lbmRfemVyb19ibG9jayhkaW8sIGRpby0+emVyb19ibG9j a19yZWFyKTsKPiArCj4gIAlpZiAoZGlvLT5mbGFncyAmIERJT19MT0NLSU5HKQo+ICAJCS8qIGxv Y2tkZXA6IG5vbi1vd25lciByZWxlYXNlICovCj4gIAkJdXBfcmVhZF9ub25fb3duZXIoJmRpby0+ aW5vZGUtPmlfYWxsb2Nfc2VtKTsKPiBAQCAtNzc3LDYgKzg4MCwxMiBAQCBzdGF0aWMgdm9pZCBj bGVhbl9ibG9ja2Rldl9hbGlhc2VzKHN0cnVjdCBkaW8gKmRpbykKPiAgICogYmxvY2sgd2l0aCB6 ZXJvcy4gVGhpcyBoYXBwZW5zIG9ubHkgaWYgdXNlci1idWZmZXIsIGZpbGVvZmZzZXQgb3IKPiAg ICogaW8gbGVuZ3RoIGlzIG5vdCBmaWxlc3lzdGVtIGJsb2NrLXNpemUgbXVsdGlwbGUuCj4gICAq Cj4gKyAqIFdlIG5lZWQgdG8gdHJhY2sgdGhlIGJsb2NrcyB3ZSBhcmUgemVyb2luZy4gSWYgd2Ug aGF2ZSBjb25jdXJyZW50IElPcyB0aGF0IGhpdAo+ICsgKiB0aGUgc2FtZSBzdGFydCBvciBlbmQg YmxvY2ssIHdlIGRvIG5vdCB3YW50IGFsbCB0aGUgSU9zIHRvIHplcm8gdGhlIHBvcnRpb24KPiAr ICogdGhleSBhcmUgbm90IHdyaXRpbmcgZGF0YSB0byBhcyB0aGF0IHdpbGwgb3ZlcndyaXRlIGRh dGEgZnJvbSB0aGUgb3RoZXIgSU9zLgo+ICsgKiBIZW5jZSB3ZSBuZWVkIHRvIGJsb2NrIHVudGls IHRoZSBmaXJzdCB1bmFsaWduZWQgSU8gY29tcGxldGVzIGJlZm9yZSB3ZSBjYW4KPiArICogY29u dGludWUgKHdpdGhvdXQgZXhlY3V0aW5nIGFueSB6ZXJvaW5nKS4KPiArICoKPiAgICogYGVuZCcg aXMgemVybyBpZiB3ZSdyZSBkb2luZyB0aGUgc3RhcnQgb2YgdGhlIElPLCAxIGF0IHRoZSBlbmQg b2YgdGhlCj4gICAqIElPLgo+ICAgKi8KPiBAQCAtNzg0LDggKzg5Myw4IEBAIHN0YXRpYyB2b2lk IGRpb196ZXJvX2Jsb2NrKHN0cnVjdCBkaW8gKmRpbywgaW50IGVuZCkKPiAgewo+ICAJdW5zaWdu ZWQgZGlvX2Jsb2Nrc19wZXJfZnNfYmxvY2s7Cj4gIAl1bnNpZ25lZCB0aGlzX2NodW5rX2Jsb2Nr czsJLyogSW4gZGlvX2Jsb2NrcyAqLwo+IC0JdW5zaWduZWQgdGhpc19jaHVua19ieXRlczsKPiAg CXN0cnVjdCBwYWdlICpwYWdlOwo+ICsJc2VjdG9yX3QgZnNibG9jazsKPiAKPiAgCWRpby0+c3Rh cnRfemVyb19kb25lID0gMTsKPiAgCWlmICghZGlvLT5ibGtmYWN0b3IgfHwgIWJ1ZmZlcl9uZXco JmRpby0+bWFwX2JoKSkKPiBAQCAtNzk3LDE3ICs5MDYsNDEgQEAgc3RhdGljIHZvaWQgZGlvX3pl cm9fYmxvY2soc3RydWN0IGRpbyAqZGlvLCBpbnQgZW5kKQo+ICAJaWYgKCF0aGlzX2NodW5rX2Js b2NrcykKPiAgCQlyZXR1cm47Cj4gCj4gKwlpZiAoZW5kKQo+ICsJCXRoaXNfY2h1bmtfYmxvY2tz ID0gZGlvX2Jsb2Nrc19wZXJfZnNfYmxvY2sgLSB0aGlzX2NodW5rX2Jsb2NrczsKPiArCj4gIAkv Kgo+ICAJICogV2UgbmVlZCB0byB6ZXJvIG91dCBwYXJ0IG9mIGFuIGZzIGJsb2NrLiAgSXQgaXMg ZWl0aGVyIGF0IHRoZQo+IC0JICogYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgdGhlIGZzIGJsb2Nr Lgo+ICsJICogYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgdGhlIGZzIGJsb2NrLCBidXQgZmlyc3Qg d2UgbmVlZCB0byBjaGVjayBpZgo+ICsJICogdGhlcmUgaXMgYWxyZWFkeSBhIHplcm9pbmcgYmVp bmcgcnVuIG9uIHRoaXMgYmxvY2suCj4gKwkgKgo+ICsJICogSWYgd2UgYXJlIGRvaW5nIGEgc3Vi LWJsb2NrIElPIChpLmUuIHplcm9pbmcgYm90aCBmcm9udCBhbmQgcmVhciBvZgo+ICsJICogdGhl IHNhbWUgYmxvY2spIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBvciBzZXQgYSBnYXVyZCBmb3IgdGhl IHJlYXIgb2YKPiArCSAqIHRoZSBibG9jayBhcyB3ZSBhbHJlYWR5IGhhdmUgb25lIHNldC4KPiAg CSAqLwo+IC0JaWYgKGVuZCkgCj4gLQkJdGhpc19jaHVua19ibG9ja3MgPSBkaW9fYmxvY2tzX3Bl cl9mc19ibG9jayAtIHRoaXNfY2h1bmtfYmxvY2tzOwo+ICsJZnNibG9jayA9IGRpby0+YmxvY2tf aW5fZmlsZSA+PiBkaW8tPmJsa2ZhY3RvcjsKPiArCWlmICghZW5kIHx8IGRpby0+emVyb19ibG9j a19mcm9udCAhPSBmc2Jsb2NrKSB7Cj4gCj4gLQl0aGlzX2NodW5rX2J5dGVzID0gdGhpc19jaHVu a19ibG9ja3MgPDwgZGlvLT5ibGtiaXRzOwo+ICsJCS8qIHdhaXQgZm9yIGFueSB6ZXJvaW5nIGFs cmVhZHkgaW4gcHJvZ3Jlc3MgKi8KPiArCQlpZiAoZGlvX3dhaXRfemVyb19ibG9jayhkaW8sIGZz YmxvY2spKSB7Cj4gKwkJCS8qIHNraXAgdGhlIHJhbmdlIHdlIHdvdWxkIGhhdmUgemVyb2VkLiAq Lwo+ICsJCQlkaW8tPm5leHRfYmxvY2tfZm9yX2lvICs9IHRoaXNfY2h1bmtfYmxvY2tzOwo+ICsJ CQlyZXR1cm47Cj4gKwkJfQo+ICsKPiArCQkvKgo+ICsJCSAqIHdlIGFyZSBnb2luZyB0byB6ZXJv IHN0dWZmIG5vdywgc28gc2V0IGEgZ3VhcmQgdG8gY2F0Y2gKPiArCQkgKiBvdGhlcnMgdGhhdCBt aWdodCB3YW50IHRvIHplcm8gdGhlIHNhbWUgYmxvY2suCj4gKwkJICovCj4gKwkJZGlvX3N0YXJ0 X3plcm9fYmxvY2soZGlvLCBmc2Jsb2NrKTsKPiArCQlpZiAoZW5kKQo+ICsJCQlkaW8tPnplcm9f YmxvY2tfcmVhciA9IGZzYmxvY2s7Cj4gKwkJZWxzZQo+ICsJCQlkaW8tPnplcm9fYmxvY2tfZnJv bnQgPSBmc2Jsb2NrOwo+ICsJfQo+IAo+ICAJcGFnZSA9IFpFUk9fUEFHRSgwKTsKPiAtCWlmIChz dWJtaXRfcGFnZV9zZWN0aW9uKGRpbywgcGFnZSwgMCwgdGhpc19jaHVua19ieXRlcywgCj4gKwlp ZiAoc3VibWl0X3BhZ2Vfc2VjdGlvbihkaW8sIHBhZ2UsIDAsIHRoaXNfY2h1bmtfYmxvY2tzIDw8 IGRpby0+YmxrYml0cywKPiAgCQkJCWRpby0+bmV4dF9ibG9ja19mb3JfaW8pKQo+ICAJCXJldHVy bjsKPiAKPiBAQCAtMTE5MSw2ICsxMzI0LDEzIEBAIF9fYmxvY2tkZXZfZGlyZWN0X0lPX25ld3Ry dW5jKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAo+ICAJ ICovCj4gIAltZW1zZXQoZGlvLCAwLCBvZmZzZXRvZihzdHJ1Y3QgZGlvLCBwYWdlcykpOwo+IAo+ ICsJLyoKPiArCSAqIHplcm9fYmxvY2tzIG5lZWQgdG8gaW5pdGlhbGlzZWQgdG8gbGFyZ2XRlXQg dmFsdWUgdG8gYXZvaWQKPiArCSAqIG1hdGNoaW5nIHRoZSB6ZXJvIGJsb2NrIGFjY2lkZW50YWxs eS4KPiArCSAqLwo+ICsJZGlvLT56ZXJvX2Jsb2NrX2Zyb250ID0gTEFTVF9TRUNUT1I7Cj4gKwlk aW8tPnplcm9fYmxvY2tfcmVhciA9IExBU1RfU0VDVE9SOwo+ICsKPiAgCWRpby0+ZmxhZ3MgPSBm bGFnczsKPiAgCWlmIChkaW8tPmZsYWdzICYgRElPX0xPQ0tJTkcpIHsKPiAgCQkvKiB3YXRjaCBv dXQgZm9yIGEgMCBsZW4gaW8gZnJvbSBhIHRyaWNrc3kgZnMgKi8KPiAtLSAKPiAxLjcuMQo+IAo+ IC0tCj4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vi c2NyaWJlIGxpbnV4LWZzZGV2ZWwiIGluCj4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9y ZG9tb0B2Z2VyLmtlcm5lbC5vcmcKPiBNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdl ci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwp4ZnMgbWFpbGluZyBsaXN0Cnhmc0Bvc3Muc2dpLmNv bQpodHRwOi8vb3NzLnNnaS5jb20vbWFpbG1hbi9saXN0aW5mby94ZnMK