From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id oBREu1VU024498 for ; Mon, 27 Dec 2010 08:56:01 -0600 Subject: Re: [PATCH 06/34] xfs: dynamic speculative EOF preallocation From: Alex Elder In-Reply-To: <1292916570-25015-7-git-send-email-david@fromorbit.com> References: <1292916570-25015-1-git-send-email-david@fromorbit.com> <1292916570-25015-7-git-send-email-david@fromorbit.com> Date: Mon, 27 Dec 2010 08:57:36 -0600 Message-ID: <1293461856.2192.36.camel@doink> Mime-Version: 1.0 Reply-To: aelder@sgi.com 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: xfs@oss.sgi.com T24gVHVlLCAyMDEwLTEyLTIxIGF0IDE4OjI5ICsxMTAwLCBEYXZlIENoaW5uZXIgd3JvdGU6Cj4g RnJvbTogRGF2ZSBDaGlubmVyIDxkY2hpbm5lckByZWRoYXQuY29tPgo+IAo+IEN1cnJlbnRseSB0 aGUgc2l6ZSBvZiB0aGUgc3BlY3VsYXRpdmUgcHJlYWxsb2NhdGlvbiBkdXJpbmcgZGVsYXllZAo+ IGFsbG9jYXRpb24gaXMgZml4ZWQgYnkgZWl0aGVyIHRoZSBhbGxvY3NpemUgbW91bnQgb3B0aW9u IG9mIGEKPiBkZWZhdWx0IHNpemUuIFdlIGFyZSBzZWVpbmcgYSBsb3Qgb2YgY2FzZXMgd2hlcmUg d2UgbmVlZCB0bwo+IHJlY29tbWVuZCB1c2luZyB0aGUgYWxsb2NzaXplIG1vdW50IG9wdGlvbiB0 byBwcmV2ZW50IGZyYWdtZW50YXRpb24KPiB3aGVuIGJ1ZmZlcmVkIHdyaXRlcyBsYW5kIGluIHRo ZSBzYW1lIEFHLgoKVGhpcyBsb29rcyBnb29kLiAgTG9nYXJpdGhtaWMgcmVkdWN0aW9uIGluIHRo ZSBzaXplCmFzIHRoZSBmaWxlIHN5c3RlbSBnZXRzIGNsb3NlIHRvIGZ1bGwgc2VlbXMgbGlrZSBh CnJlYXNvbmFibGUgaGV1cmlzdGljLiAgSSBoYXZlIGEgZmV3IG1pbm9yIGNvbW1lbnRzCmJlbG93 LCB3aGljaCB5b3UgY2FuIGFkZHJlc3MgYXQgeW91ciBvcHRpb24uCkluIGFueSBjYXNlOgoKUmV2 aWV3ZWQtYnk6IEFsZXggRWxkZXIgPGFlbGRlckBzZ2kuY29tPgoKCj4gCj4gUmF0aGVyIHRoYW4g dXNpbmcgYSBmaXhlZCBwcmVhbGxvY2F0aW9uIHNpemUgYnkgZGVmYXVsdCAodXAgdG8gNjRrKSwK PiBtYWtlIGl0IGR5bmFtaWMgYnkgYmFzaW5nIGl0IG9uIHRoZSBjdXJyZW50IGlub2RlIHNpemUu IFRoYXQgd2F5IHRoZQo+IEVPRiBwcmVhbGxvY2F0aW9uIHdpbGwgaW5jcmVhc2UgYXMgdGhlIGZp bGUgc2l6ZSBpbmNyZWFzZXMuICBIZW5jZQo+IGZvciBzdHJlYW1pbmcgd3JpdGVzIHdlIGFyZSBt dWNoIG1vcmUgbGlrZWx5IHRvIGdldCBsYXJnZQo+IHByZWFsbG9jYXRpb25zIGV4YWN0bHkgd2hl biB3ZSBuZWVkIGl0IHRvIHJlZHVjZSBmcmFnZW1lbnRhdGlvbi4KPiAKPiBGb3IgZGVmYXVsdCBz ZXR0aW5ncywgdGhlIHNpemUgb2YgdGhlIGluaXRpYWwgZXh0ZW50cyBpcyBkZXRlcm1pbmVkCj4g YnkgdGhlIG51bWJlciBvZiBwYXJhbGxlbCB3cml0ZXJzIGFuZCB0aGUgYW1vdW50IG9mIG1lbW9y eSBpbiB0aGUKPiBtYWNoaW5lLiBGb3IgNEdCIFJBTSBhbmQgNCBjb25jdXJyZW50IDMyR0IgZmls ZSB3cml0ZXM6Cj4gCj4gRVhUOiBGSUxFLU9GRlNFVCAgICAgICAgICAgQkxPQ0stUkFOR0UgICAg ICAgICAgQUcgQUctT0ZGU0VUICAgICAgICAgICAgICAgICBUT1RBTAo+ICAgIDA6IFswLi4xMDQ4 NTc1XTogICAgICAgICAxMDQ4NjcyLi4yMDk3MjQ3ICAgICAgMCAoMTA0ODY3Mi4uMjA5NzI0Nykg ICAgICAxMDQ4NTc2Cj4gICAgMTogWzEwNDg1NzYuLjIwOTcxNTFdOiAgIDUyNDI5NzYuLjYyOTE1 NTEgICAgICAwICg1MjQyOTc2Li42MjkxNTUxKSAgICAgIDEwNDg1NzYKPiAgICAyOiBbMjA5NzE1 Mi4uNDE5NDMwM106ICAgMTI1ODMwMDguLjE0NjgwMTU5ICAgIDAgKDEyNTgzMDA4Li4xNDY4MDE1 OSkgICAgMjA5NzE1Mgo+ICAgIDM6IFs0MTk0MzA0Li44Mzg4NjA3XTogICAyNTE2NTkyMC4uMjkz NjAyMjMgICAgMCAoMjUxNjU5MjAuLjI5MzYwMjIzKSAgICA0MTk0MzA0Cj4gICAgNDogWzgzODg2 MDguLjE2Nzc3MjE1XTogIDU4NzIwMzUyLi42NzEwODk1OSAgICAwICg1ODcyMDM1Mi4uNjcxMDg5 NTkpICAgIDgzODg2MDgKPiAgICA1OiBbMTY3NzcyMTYuLjMzNTU0NDIzXTogMTE3NDQwNTg0Li4x MzQyMTc3OTEgIDAgKDExNzQ0MDU4NC4uMTM0MjE3NzkxKSAxNjc3NzIwOAo+ICAgIDY6IFszMzU1 NDQyNC4uNTAzMzE1MTFdOiAxODQ1NDkwNTYuLjIwMTMyNjE0MyAgMCAoMTg0NTQ5MDU2Li4yMDEz MjYxNDMpIDE2Nzc3MDg4Cj4gICAgNzogWzUwMzMxNTEyLi42NzEwODU5OV06IDI1MTY1NzQwOC4u MjY4NDM0NDk1ICAwICgyNTE2NTc0MDguLjI2ODQzNDQ5NSkgMTY3NzcwODgKPiAKPiBhbmQgZm9y IDE2IGNvbmN1cnJlbnQgMTZHQiBmaWxlIHdyaXRlczoKPiAKPiAgRVhUOiBGSUxFLU9GRlNFVCAg ICAgICAgICAgQkxPQ0stUkFOR0UgICAgICAgICAgQUcgQUctT0ZGU0VUICAgICAgICAgICAgICAg ICBUT1RBTAo+ICAgIDA6IFswLi4yNjIxNDNdOiAgICAgICAgICAyNDkwNDcyLi4yNzUyNjE1ICAg ICAgMCAoMjQ5MDQ3Mi4uMjc1MjYxNSkgICAgICAgMjYyMTQ0Cj4gICAgMTogWzI2MjE0NC4uNTI0 Mjg3XTogICAgIDYyOTE1NjAuLjY1NTM3MDMgICAgICAwICg2MjkxNTYwLi42NTUzNzAzKSAgICAg ICAyNjIxNDQKPiAgICAyOiBbNTI0Mjg4Li4xMDQ4NTc1XTogICAgMTM2MzE1OTIuLjE0MTU1ODc5 ICAgIDAgKDEzNjMxNTkyLi4xNDE1NTg3OSkgICAgIDUyNDI4OAo+ICAgIDM6IFsxMDQ4NTc2Li4y MDk3MTUxXTogICAzMDQwODgwOC4uMzE0NTczODMgICAgMCAoMzA0MDg4MDguLjMxNDU3MzgzKSAg ICAxMDQ4NTc2Cj4gICAgNDogWzIwOTcxNTIuLjQxOTQzMDNdOiAgIDUyNDI4OTA0Li41NDUyNjA1 NSAgICAwICg1MjQyODkwNC4uNTQ1MjYwNTUpICAgIDIwOTcxNTIKPiAgICA1OiBbNDE5NDMwNC4u ODM4ODYwN106ICAgMTA0ODU3NzA0Li4xMDkwNTIwMDcgIDAgKDEwNDg1NzcwNC4uMTA5MDUyMDA3 KSAgNDE5NDMwNAo+ICAgIDY6IFs4Mzg4NjA4Li4xNjc3NzIxNV06ICAyMDk3MTUzMDQuLjIxODEw MzkxMSAgMCAoMjA5NzE1MzA0Li4yMTgxMDM5MTEpICA4Mzg4NjA4Cj4gICAgNzogWzE2Nzc3MjE2 Li4zMzU1NDQyM106IDQ1Mjk4NDg0OC4uNDY5NzYyMDU1ICAwICg0NTI5ODQ4NDguLjQ2OTc2MjA1 NSkgMTY3NzcyMDgKPiAKPiBCZWNhdXNlIGl0IGlzIGhhcmQgdG8gdGFrZSBiYWNrIHNwZWN1YWx0 aXZlIHByZWFsbG9jYXRpb24sIGNhc2VzCj4gd2hlcmUgdGhlcmUgYXJlIGxhcmdlIHNsb3cgZ3Jv d2luZyBsb2cgZmlsZXMgb24gYSBuZWFybHkgZnVsbAo+IGZpbGVzeXN0ZW0gbWF5IGNhdXNlIHBy ZW1hdHVyZSBFTk9TUEMuIEhlbmNlIGFzIHRoZSBmaWxlc3lzdGVtIG5lYXJzCj4gZnVsbCwgdGhl IG1heGltdW0gZHluYW1pYyBwcmVhbGxvYyBzaXplINGWcyByZWR1Y2VkIGFjY29yZGluZyB0byB0 aGlzCj4gdGFibGUgKGJhc2VkIG9uIDRrIGJsb2NrIHNpemUpOgo+IAo+IGZyZWVzcGFjZSAgICAg ICBtYXggcHJlYWxsb2Mgc2l6ZQo+ICAgPjUlICAgICAgICAgICAgIGZ1bGwgZXh0ZW50ICg4R0Ip Cj4gICA0LTUlICAgICAgICAgICAgIDJHQiAoOEdCID4+IDIpCj4gICAzLTQlICAgICAgICAgICAg IDFHQiAoOEdCID4+IDMpCj4gICAyLTMlICAgICAgICAgICA1MTJNQiAoOEdCID4+IDQpCj4gICAx LTIlICAgICAgICAgICAyNTZNQiAoOEdCID4+IDUpCj4gICA8MSUgICAgICAgICAgICAxMjhNQiAo OEdCID4+IDYpCgpPbiByZWFsbHkgc21hbGwgZmlsZXN5c3RlbXMgdGhpcyBtaWdodCBiZSBleGNl c3NpdmUuCk9uIHRoZSBvdGhlciBoYW5kLCB5b3UncmUgYWxyZWFkeSBiYXNpbmcgdGhlIHNpemUg b24KdGhlIGZpbGUgc2l6ZSBzbyB0aGF0IHNob3VsZCBsaW1pdCB0aGluZ3MganVzdCBmaW5lLgoK PiBUaGlzIHNob3VsZCByZWR1Y2UgdGhlIGFtb3VudCBvZiBzcGFjZSBoZWxkIGluIHNwZWN1bGF0 aXZlCj4gcHJlYWxsb2NhdGlvbiBmb3Igc3VjaCBjYXNlcy4KPiAKPiBUaGUgYWxsb2NzaXplIG1v dW50IG9wdGlvbiB0dXJucyBvZmYgdGhlIGR5bmFtaWMgYmVoYXZpb3VyIGFuZCBmaXhlcwo+IHRo ZSBwcmVhbGxvYyBzaXplIHRvIHdoYXRldmVyIHRoZSBtb3VudCBvcHRpb24gc3BlY2lmaWVzLiBp LmUuIHRoZQo+IGJlaGF2aW91ciBpcyB1bmNoYW5nZWQuCj4gCj4gU2lnbmVkLW9mZi1ieTogRGF2 ZSBDaGlubmVyIDxkY2hpbm5lckByZWRoYXQuY29tPgo+IC0tLQo+ICBmcy94ZnMveGZzX2Zzb3Bz LmMgfCAgICAxICsKPiAgZnMveGZzL3hmc19pb21hcC5jIHwgICA4NCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KPiAgZnMveGZzL3hmc19tb3VudC5j IHwgICAyMSArKysrKysrKysrKysrCj4gIGZzL3hmcy94ZnNfbW91bnQuaCB8ICAgMTQgKysrKysr KysKPiAgNCBmaWxlcyBjaGFuZ2VkLCAxMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0p Cj4gCj4gZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMu Ywo+IGluZGV4IGJlMzRmZjIuLjZkMTcyMDYgMTAwNjQ0Cj4gLS0tIGEvZnMveGZzL3hmc19mc29w cy5jCj4gKysrIGIvZnMveGZzL3hmc19mc29wcy5jCj4gQEAgLTM3NCw2ICszNzQsNyBAQCB4ZnNf Z3Jvd2ZzX2RhdGFfcHJpdmF0ZSgKPiAgCQltcC0+bV9tYXhpY291bnQgPSBpY291bnQgPDwgbXAt Pm1fc2Iuc2JfaW5vcGJsb2c7Cj4gIAl9IGVsc2UKPiAgCQltcC0+bV9tYXhpY291bnQgPSAwOwo+ ICsJeGZzX3NldF9sb3dfc3BhY2VfdGhyZXNob2xkcyhtcCk7Cj4gIAo+ICAJLyogdXBkYXRlIHNl Y29uZGFyeSBzdXBlcmJsb2Nrcy4gKi8KPiAgCWZvciAoYWdubyA9IDE7IGFnbm8gPCBuYWdjb3Vu dDsgYWdubysrKSB7Cj4gZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94 ZnNfaW9tYXAuYwo+IGluZGV4IDIyYjYyYTEuLmYzNmQyYzggMTAwNjQ0Cj4gLS0tIGEvZnMveGZz L3hmc19pb21hcC5jCj4gKysrIGIvZnMveGZzL3hmc19pb21hcC5jCj4gQEAgLTI2Nyw2ICsyNjcs OSBAQCBlcnJvcl9vdXQ6Cj4gICAqIElmIHRoZSBjYWxsZXIgaXMgZG9pbmcgYSB3cml0ZSBhdCB0 aGUgZW5kIG9mIHRoZSBmaWxlLCB0aGVuIGV4dGVuZCB0aGUKPiAgICogYWxsb2NhdGlvbiBvdXQg dG8gdGhlIGZpbGUgc3lzdGVtJ3Mgd3JpdGUgaW9zaXplLiAgV2UgY2xlYW4gdXAgYW55IGV4dHJh Cj4gICAqIHNwYWNlIGxlZnQgb3ZlciB3aGVuIHRoZSBmaWxlIGlzIGNsb3NlZCBpbiB4ZnNfaW5h Y3RpdmUoKS4KPiArICoKPiArICogSWYgd2UgZmluZCB3ZSBhbHJlYWR5IGhhdmUgZGVsYWxsb2Mg cHJlYWxsb2NhdGlvbiBiZXlvbmQgRU9GLCBkb24ndCBkbyBtb3JlCj4gKyAqIHByZWFsbG9jYXRp b24gYXMgaXQgaXQgbm90IG5lZWRlZC4KPiAgICovCj4gIFNUQVRJQyBpbnQKPiAgeGZzX2lvbWFw X2VvZl93YW50X3ByZWFsbG9jYXRlKAo+IEBAIC0yODIsNiArMjg1LDcgQEAgeGZzX2lvbWFwX2Vv Zl93YW50X3ByZWFsbG9jYXRlKAo+ICAJeGZzX2ZpbGJsa3NfdCAgIGNvdW50X2ZzYjsKPiAgCXhm c19mc2Jsb2NrX3QJZmlyc3RibG9jazsKPiAgCWludAkJbiwgZXJyb3IsIGltYXBzOwo+ICsJaW50 CQlmb3VuZF9kZWxhbGxvYyA9IDA7Cj4gIAo+ICAJKnByZWFsbG9jID0gMDsKPiAgCWlmICgob2Zm c2V0ICsgY291bnQpIDw9IGlwLT5pX3NpemUpCj4gQEAgLTMwNiwxMiArMzEwLDYwIEBAIHhmc19p b21hcF9lb2Zfd2FudF9wcmVhbGxvY2F0ZSgKPiAgCQkJCXJldHVybiAwOwo+ICAJCQlzdGFydF9m c2IgKz0gaW1hcFtuXS5icl9ibG9ja2NvdW50Owo+ICAJCQljb3VudF9mc2IgLT0gaW1hcFtuXS5i cl9ibG9ja2NvdW50Owo+ICsKPiArCQkJaWYgKGltYXBbbl0uYnJfc3RhcnRibG9jayA9PSBERUxB WVNUQVJUQkxPQ0spCj4gKwkJCQlmb3VuZF9kZWxhbGxvYyA9IDE7Cj4gIAkJfQo+ICAJfQo+IC0J KnByZWFsbG9jID0gMTsKPiArCWlmICghZm91bmRfZGVsYWxsb2MpCj4gKwkJKnByZWFsbG9jID0g MTsKCklzbid0IHRoaXMgYSBzZXBhcmF0ZSBjaGFuZ2UsIHBvc3NpYmx5IHdvcnRoeSBvZiBpdHMK b3duIGNvbW1pdD8KCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiArLyoKPiArICogSWYgd2UgZG9u J3QgaGF2ZSBhIHVzZXIgc3BlY2lmaWVkIHByZWFsbG9jYXRpb24gc2l6ZSwgZHluYW1pY2FsbHkg aW5jcmVhc2UKPiArICogdGhlIHByZWFsbG9jYXRpb24gc2l6ZSBhcyB0aGUgc2l6ZSBvZiB0aGUg ZmlsZSBncm93cy4gQ2FwIHRoZSBtYXhpbXVtIHNpemUKPiArICogYXQgYSBzaW5nbGUgZXh0ZW50 IG9yIGxlc3MgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbmVhciBmdWxsLiBUaGUgY2xvc2VyIHRoZQo+ ICsgKiBmaWxlc3lzdGVtIGlzIHRvIGZ1bGwsIHRoZSBzbWFsbGVyIHRoZSBtYXhpbXVtIHByZWFs b2NhdGlvbi4KPiArICovCj4gK1NUQVRJQyB4ZnNfZnNibG9ja190Cj4gK3hmc19pb21hcF9wcmVh bGxvY19zaXplKAo+ICsJc3RydWN0IHhmc19tb3VudAkqbXAsCj4gKwlzdHJ1Y3QgeGZzX2lub2Rl CSppcCkKPiArewo+ICsJeGZzX2ZzYmxvY2tfdAkJYWxsb2NfYmxvY2tzID0gMDsKPiArCj4gKwlp ZiAoIShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9ERkxUX0lPU0laRSkpIHsKPiArCQlpbnQgc2hp ZnQgPSAwOwo+ICsJCWludDY0X3QgZnJlZXNwOwo+ICsKPiArCQlhbGxvY19ibG9ja3MgPSBYRlNf Ql9UT19GU0IobXAsIGlwLT5pX3NpemUpOwoKV2h5IG5vdCBpX3NpemVfcmVhZCgpPyAgT25seSBt YXR0ZXJzIGZvciAzMi1iaXQsIGJ1dAp5b3UncmUgdXNpbmcgZG9fZGl2KCkgYmVsb3cgc28geW91 IGRvIHNlZW0gdG8gY2FyZQphYm91dCBpdCBzb21ldGltZXMuCgo+ICsJCWFsbG9jX2Jsb2NrcyA9 IFhGU19GSUxFT0ZGX01JTihNQVhFWFRMRU4sCj4gKwkJCQkJcm91bmRkb3duX3Bvd19vZl90d28o YWxsb2NfYmxvY2tzKSk7Cj4gKwo+ICsJCWZyZWVzcCA9IHBlcmNwdV9jb3VudGVyX3JlYWRfcG9z aXRpdmUoCj4gKwkJCQkJCSZtcC0+bV9pY3NiW1hGU19JQ1NCX0ZEQkxPQ0tTXSk7Cj4gKwkJaWYg KGZyZWVzcCA8IG1wLT5tX2xvd19zcGFjZVtYRlNfTE9XU1BfNV9QQ05UXSkgewo+ICsJCQlzaGlm dCA9IDI7Cj4gKwkJCWlmIChmcmVlc3AgPCBtcC0+bV9sb3dfc3BhY2VbWEZTX0xPV1NQXzRfUENO VF0pCj4gKwkJCQlzaGlmdCsrOwo+ICsJCQlpZiAoZnJlZXNwIDwgbXAtPm1fbG93X3NwYWNlW1hG U19MT1dTUF8zX1BDTlRdKQo+ICsJCQkJc2hpZnQrKzsKPiArCQkJaWYgKGZyZWVzcCA8IG1wLT5t X2xvd19zcGFjZVtYRlNfTE9XU1BfMl9QQ05UXSkKPiArCQkJCXNoaWZ0Kys7Cj4gKwkJCWlmIChm cmVlc3AgPCBtcC0+bV9sb3dfc3BhY2VbWEZTX0xPV1NQXzFfUENOVF0pCj4gKwkJCQlzaGlmdCsr Owo+ICsJCX0KPiArCQlpZiAoc2hpZnQpCj4gKwkJCWFsbG9jX2Jsb2NrcyA+Pj0gc2hpZnQ7Cj4g Kwl9Cj4gKwo+ICsJaWYgKGFsbG9jX2Jsb2NrcyA8IG1wLT5tX3dyaXRlaW9fYmxvY2tzKQo+ICsJ CWFsbG9jX2Jsb2NrcyA9IG1wLT5tX3dyaXRlaW9fYmxvY2tzOwo+ICsKPiArCXJldHVybiBhbGxv Y19ibG9ja3M7Cj4gK30KPiArCj4gIGludAo+ICB4ZnNfaW9tYXBfd3JpdGVfZGVsYXkoCj4gIAl4 ZnNfaW5vZGVfdAkqaXAsCj4gQEAgLTM0NCw2ICszOTYsNyBAQCB4ZnNfaW9tYXBfd3JpdGVfZGVs YXkoCj4gIAlleHRzeiA9IHhmc19nZXRfZXh0c3pfaGludChpcCk7Cj4gIAlvZmZzZXRfZnNiID0g WEZTX0JfVE9fRlNCVChtcCwgb2Zmc2V0KTsKPiAgCj4gKwoKRXh0cmEgYmxhbmsgbGluZS4KCj4g IAllcnJvciA9IHhmc19pb21hcF9lb2Zfd2FudF9wcmVhbGxvY2F0ZShtcCwgaXAsIG9mZnNldCwg Y291bnQsCj4gIAkJCQlpbWFwLCBYRlNfV1JJVEVfSU1BUFMsICZwcmVhbGxvYyk7Cj4gIAlpZiAo ZXJyb3IpCj4gQEAgLTM1MSw5ICs0MDQsMTEgQEAgeGZzX2lvbWFwX3dyaXRlX2RlbGF5KAo+ICAK PiAgcmV0cnk6Cj4gIAlpZiAocHJlYWxsb2MpIHsKPiArCQl4ZnNfZnNibG9ja190CWFsbG9jX2Js b2NrcyA9IHhmc19pb21hcF9wcmVhbGxvY19zaXplKG1wLCBpcCk7Cj4gKwo+ICAJCWFsaWduZWRf b2Zmc2V0ID0gWEZTX1dSSVRFSU9fQUxJR04obXAsIChvZmZzZXQgKyBjb3VudCAtIDEpKTsKPiAg CQlpb2FsaWduID0gWEZTX0JfVE9fRlNCVChtcCwgYWxpZ25lZF9vZmZzZXQpOwo+IC0JCWxhc3Rf ZnNiID0gaW9hbGlnbiArIG1wLT5tX3dyaXRlaW9fYmxvY2tzOwo+ICsJCWxhc3RfZnNiID0gaW9h bGlnbiArIGFsbG9jX2Jsb2NrczsKPiAgCX0gZWxzZSB7Cj4gIAkJbGFzdF9mc2IgPSBYRlNfQl9U T19GU0IobXAsICgoeGZzX3Vmc2l6ZV90KShvZmZzZXQgKyBjb3VudCkpKTsKPiAgCX0KPiBAQCAt MzcxLDIyICs0MjYsMzEgQEAgcmV0cnk6Cj4gIAkJCSAgWEZTX0JNQVBJX0RFTEFZIHwgWEZTX0JN QVBJX1dSSVRFIHwKPiAgCQkJICBYRlNfQk1BUElfRU5USVJFLCAmZmlyc3RibG9jaywgMSwgaW1h cCwKPiAgCQkJICAmbmltYXBzLCBOVUxMKTsKPiAtCWlmIChlcnJvciAmJiAoZXJyb3IgIT0gRU5P U1BDKSkKPiArCXN3aXRjaCAoZXJyb3IpIHsKPiArCWNhc2UgMDoKPiArCWNhc2UgRU5PU1BDOgo+ ICsJY2FzZSBFRFFVT1Q6Cj4gKwkJYnJlYWs7CgpUaGlzIChhYm92ZSBhbmQgYmVsb3csIGluIHRo aXMgaHVuaykgaXMgYWxzbyBhIHNlcGFyYXRlCmNoYW5nZSwgcG9zc2libHkgd29ydGh5IG9mIGl0 cyBvd24gc21hbGwgY29tbWl0LgoKPiArCWRlZmF1bHQ6Cj4gIAkJcmV0dXJuIFhGU19FUlJPUihl cnJvcik7Cj4gKwl9Cj4gIAo+ICAJLyoKPiAtCSAqIElmIGJtYXBpIHJldHVybmVkIHVzIG5vdGhp bmcsIGFuZCBpZiB3ZSBkaWRuJ3QgZ2V0IGJhY2sgRURRVU9ULAo+IC0JICogdGhlbiB3ZSBtdXN0 IGhhdmUgcnVuIG91dCBvZiBzcGFjZSAtIGZsdXNoIGFsbCBvdGhlciBpbm9kZXMgd2l0aAo+IC0J ICogZGVsYWxsb2MgYmxvY2tzIGFuZCByZXRyeSB3aXRob3V0IEVPRiBwcmVhbGxvY2F0aW9uLgo+ ICsJICogSWYgYm1hcGkgcmV0dXJuZWQgdXMgbm90aGluZywgd2UgZ290IGVpdGhlciBFTk9TUEMg b3IgRURRVU9ULiAgRm9yCj4gKwkgKiBFTk9TUEMsICogZmx1c2ggYWxsIG90aGVyIGlub2RlcyB3 aXRoIGRlbGFsbG9jIGJsb2NrcyB0byBmcmVlIHVwCj4gKwkgKiBzb21lIG9mIHRoZSBleGNlc3Mg cmVzZXJ2ZWQgbWV0YWRhdGEgc3BhY2UuIEZvciBib3RoIGNhc2VzLCByZXRyeQo+ICsJICogd2l0 aG91dCBFT0YgcHJlYWxsb2NhdGlvbi4KPiAgCSAqLwo+ICAJaWYgKG5pbWFwcyA9PSAwKSB7Cj4g IAkJdHJhY2VfeGZzX2RlbGFsbG9jX2Vub3NwYyhpcCwgb2Zmc2V0LCBjb3VudCk7Cj4gIAkJaWYg KGZsdXNoZWQpCj4gLQkJCXJldHVybiBYRlNfRVJST1IoRU5PU1BDKTsKPiArCQkJcmV0dXJuIFhG U19FUlJPUihlcnJvciA/IGVycm9yIDogRU5PU1BDKTsKPiAgCj4gLQkJeGZzX2l1bmxvY2soaXAs IFhGU19JTE9DS19FWENMKTsKPiAtCQl4ZnNfZmx1c2hfaW5vZGVzKGlwKTsKPiAtCQl4ZnNfaWxv Y2soaXAsIFhGU19JTE9DS19FWENMKTsKPiArCQlpZiAoZXJyb3IgPT0gRU5PU1BDKSB7Cj4gKwkJ CXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Cj4gKwkJCXhmc19mbHVzaF9pbm9kZXMo aXApOwo+ICsJCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKPiArCQl9Cj4gIAo+ICAJ CWZsdXNoZWQgPSAxOwo+ICAJCWVycm9yID0gMDsKPiBkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19t b3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCj4gaW5kZXggZDU3MTAyMzIuLmYxYjA5NGQgMTAw NjQ0Cj4gLS0tIGEvZnMveGZzL3hmc19tb3VudC5jCj4gKysrIGIvZnMveGZzL3hmc19tb3VudC5j Cj4gQEAgLTExMDEsNiArMTEwMSwyNCBAQCB4ZnNfc2V0X3J3X3NpemVzKHhmc19tb3VudF90ICpt cCkKPiAgfQo+ICAKPiAgLyoKPiArICogcHJlY2FsY3VsYXRlIHRoZSBsb3cgc3BhY2UgdGhyZXNo b2xkcyBmb3IgZHluYW1pYyBzcGVjdWxhdGl2ZSBwcmVhbGxvY2F0aW9uLgo+ICsgKi8KPiArdm9p ZAo+ICt4ZnNfc2V0X2xvd19zcGFjZV90aHJlc2hvbGRzKAo+ICsJc3RydWN0IHhmc19tb3VudAkq bXApCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBYRlNfTE9XU1BfTUFY OyBpKyspIHsKPiArCQlfX3VpbnQ2NF90IHNwYWNlID0gbXAtPm1fc2Iuc2JfZGJsb2NrczsKPiAr Cj4gKwkJZG9fZGl2KHNwYWNlLCAxMDApOwoKSG93IGFib3V0IGNvbXB1dGluZyB0aGlzIG9uY2Us IG91dHNpZGUgdGhlIGxvb3A/Cgo+ICsJCW1wLT5tX2xvd19zcGFjZVtpXSA9IHNwYWNlICogKGkg KyAxKTsKPiArCX0KPiArfQo+ICsKPiArCj4gKy8qCj4gICAqIFNldCB3aGV0aGVyIHdlJ3JlIHVz aW5nIGlub2RlIGFsaWdubWVudC4KPiAgICovCj4gIFNUQVRJQyB2b2lkCj4gQEAgLTEzMjIsNiAr MTM0MCw5IEBAIHhmc19tb3VudGZzKAo+ICAJICovCj4gIAl4ZnNfc2V0X3J3X3NpemVzKG1wKTsK PiAgCj4gKwkvKiBzZXQgdGhlIGxvdyBzcGFjZSB0aHJlc2hvbGRzIGZvciBkeW5hbWljIHByZWFs bG9jYXRpb24gKi8KPiArCXhmc19zZXRfbG93X3NwYWNlX3RocmVzaG9sZHMobXApOwo+ICsKPiAg CS8qCj4gIAkgKiBTZXQgdGhlIGlub2RlIGNsdXN0ZXIgc2l6ZS4KPiAgCSAqIFRoaXMgbWF5IHN0 aWxsIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGZpbGUgc3lzdGVtCj4gZGlmZiAtLWdpdCBhL2ZzL3hm cy94ZnNfbW91bnQuaCBiL2ZzL3hmcy94ZnNfbW91bnQuaAo+IGluZGV4IDAzYWQyNWM2Li43YjQy ZTA0IDEwMDY0NAo+IC0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaAo+ICsrKyBiL2ZzL3hmcy94ZnNf bW91bnQuaAo+IEBAIC03NSw2ICs3NSwxNiBAQCBlbnVtIHsKPiAgCVhGU19JQ1NCX01BWCwKPiAg fTsKPiAgCj4gKy8qIGR5bmFtaWMgcHJlYWxsb2NhdGlvbiBmcmVlIHNwYWNlIHRocmVzaG9sZHMs IDUlIGRvd24gdG8gMSUgKi8KPiArZW51bSB7Cj4gKwlYRlNfTE9XU1BfMV9QQ05UID0gMCwKCldo eSBub3QgbWFrZSAxJSBiZSAxLCAyJSBiZSAyLCBldGMuPwoKPiArCVhGU19MT1dTUF8yX1BDTlQs Cj4gKwlYRlNfTE9XU1BfM19QQ05ULAo+ICsJWEZTX0xPV1NQXzRfUENOVCwKPiArCVhGU19MT1dT UF81X1BDTlQsCj4gKwlYRlNfTE9XU1BfTUFYLAo+ICt9Owo+ICsKPiAgdHlwZWRlZiBzdHJ1Y3Qg eGZzX21vdW50IHsKPiAgCXN0cnVjdCBzdXBlcl9ibG9jawkqbV9zdXBlcjsKPiAgCXhmc190aWRf dAkJbV90aWQ7CQkvKiBuZXh0IHVudXNlZCB0aWQgZm9yIGZzICovCj4gQEAgLTE2OSw2ICsxNzks OCBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQgewo+ICAJCQkJCQkgICBvbiB0aGUgbmV4dCBy ZW1vdW50LHJ3ICovCj4gIAlzdHJ1Y3Qgc2hyaW5rZXIJCW1faW5vZGVfc2hyaW5rOwkvKiBpbm9k ZSByZWNsYWltIHNocmlua2VyICovCj4gIAlzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIJbV9pY3NiW1hG U19JQ1NCX01BWF07Cj4gKwlpbnQ2NF90CQkJbV9sb3dfc3BhY2VbWEZTX0xPV1NQX01BWF07Cj4g KwkJCQkJCS8qIGxvdyBmcmVlIHNwYWNlIHRocmVzaG9sZHMgKi8KPiAgfSB4ZnNfbW91bnRfdDsK PiAgCj4gIC8qCj4gQEAgLTMzMyw2ICszNDUsOCBAQCBleHRlcm4gdm9pZAl4ZnNfaWNzYl9zeW5j X2NvdW50ZXJzKHN0cnVjdCB4ZnNfbW91bnQgKik7Cj4gIGV4dGVybiBpbnQJeGZzX2ljc2JfbW9k aWZ5X2lub2RlcyhzdHJ1Y3QgeGZzX21vdW50ICosIGludCwgaW50NjRfdCk7Cj4gIGV4dGVybiBp bnQJeGZzX2ljc2JfbW9kaWZ5X2ZyZWVfYmxvY2tzKHN0cnVjdCB4ZnNfbW91bnQgKiwgaW50NjRf dCwgaW50KTsKPiAgCj4gK2V4dGVybiB2b2lkCXhmc19zZXRfbG93X3NwYWNlX3RocmVzaG9sZHMo c3RydWN0IHhmc19tb3VudCAqKTsKPiArCj4gICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCj4gIAo+ ICBleHRlcm4gdm9pZAl4ZnNfbW9kX3NiKHN0cnVjdCB4ZnNfdHJhbnMgKiwgX19pbnQ2NF90KTsK CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KeGZzIG1h aWxpbmcgbGlzdAp4ZnNAb3NzLnNnaS5jb20KaHR0cDovL29zcy5zZ2kuY29tL21haWxtYW4vbGlz dGluZm8veGZzCg==