From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id oBREx6ag024619 for ; Mon, 27 Dec 2010 08:59:06 -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 09:00:56 -0600 Message-ID: <1293462056.3851.1.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 T24gVHVlLCAyMDEwLTEyLTIxIGF0IDE4OjI5ICsxMTAwLCBEYXZlIENoaW5uZXIgd3JvdGU6IAo+ IEZyb206IERhdmUgQ2hpbm5lciA8ZGNoaW5uZXJAcmVkaGF0LmNvbT4KPiAKPiBDdXJyZW50bHkg dGhlIHNpemUgb2YgdGhlIHNwZWN1bGF0aXZlIHByZWFsbG9jYXRpb24gZHVyaW5nIGRlbGF5ZWQK PiBhbGxvY2F0aW9uIGlzIGZpeGVkIGJ5IGVpdGhlciB0aGUgYWxsb2NzaXplIG1vdW50IG9wdGlv biBvZiBhCj4gZGVmYXVsdCBzaXplLiBXZSBhcmUgc2VlaW5nIGEgbG90IG9mIGNhc2VzIHdoZXJl IHdlIG5lZWQgdG8KPiByZWNvbW1lbmQgdXNpbmcgdGhlIGFsbG9jc2l6ZSBtb3VudCBvcHRpb24g dG8gcHJldmVudCBmcmFnbWVudGF0aW9uCj4gd2hlbiBidWZmZXJlZCB3cml0ZXMgbGFuZCBpbiB0 aGUgc2FtZSBBRy4KClRoaXMgbG9va3MgZ29vZC4gIExvZ2FyaXRobWljIHJlZHVjdGlvbiBpbiB0 aGUgc2l6ZQphcyB0aGUgZmlsZSBzeXN0ZW0gZ2V0cyBjbG9zZSB0byBmdWxsIHNlZW1zIGxpa2Ug YQpyZWFzb25hYmxlIGhldXJpc3RpYy4gIEEgZmV3IG1vcmUgbWlub3IgY29tbWVudHMKYmVsb3cs IHdoaWNoIHlvdSBjYW4gYWRkcmVzcyBhdCB5b3VyIG9wdGlvbi4KSW4gYW55IGNhc2U6CgpSZXZp ZXdlZC1ieTogQWxleCBFbGRlciA8YWVsZGVyQHNnaS5jb20+CgoKPiAKPiBSYXRoZXIgdGhhbiB1 c2luZyBhIGZpeGVkIHByZWFsbG9jYXRpb24gc2l6ZSBieSBkZWZhdWx0ICh1cCB0byA2NGspLAo+ IG1ha2UgaXQgZHluYW1pYyBieSBiYXNpbmcgaXQgb24gdGhlIGN1cnJlbnQgaW5vZGUgc2l6ZS4g VGhhdCB3YXkgdGhlCj4gRU9GIHByZWFsbG9jYXRpb24gd2lsbCBpbmNyZWFzZSBhcyB0aGUgZmls ZSBzaXplIGluY3JlYXNlcy4gIEhlbmNlCj4gZm9yIHN0cmVhbWluZyB3cml0ZXMgd2UgYXJlIG11 Y2ggbW9yZSBsaWtlbHkgdG8gZ2V0IGxhcmdlCj4gcHJlYWxsb2NhdGlvbnMgZXhhY3RseSB3aGVu IHdlIG5lZWQgaXQgdG8gcmVkdWNlIGZyYWdlbWVudGF0aW9uLgo+IAo+IEZvciBkZWZhdWx0IHNl dHRpbmdzLCB0aGUgc2l6ZSBvZiB0aGUgaW5pdGlhbCBleHRlbnRzIGlzIGRldGVybWluZWQKPiBi eSB0aGUgbnVtYmVyIG9mIHBhcmFsbGVsIHdyaXRlcnMgYW5kIHRoZSBhbW91bnQgb2YgbWVtb3J5 IGluIHRoZQo+IG1hY2hpbmUuIEZvciA0R0IgUkFNIGFuZCA0IGNvbmN1cnJlbnQgMzJHQiBmaWxl IHdyaXRlczoKPiAKPiBFWFQ6IEZJTEUtT0ZGU0VUICAgICAgICAgICBCTE9DSy1SQU5HRSAgICAg ICAgICBBRyBBRy1PRkZTRVQgICAgICAgICAgICAgICAgIFRPVEFMCj4gICAgMDogWzAuLjEwNDg1 NzVdOiAgICAgICAgIDEwNDg2NzIuLjIwOTcyNDcgICAgICAwICgxMDQ4NjcyLi4yMDk3MjQ3KSAg ICAgIDEwNDg1NzYKPiAgICAxOiBbMTA0ODU3Ni4uMjA5NzE1MV06ICAgNTI0Mjk3Ni4uNjI5MTU1 MSAgICAgIDAgKDUyNDI5NzYuLjYyOTE1NTEpICAgICAgMTA0ODU3Ngo+ICAgIDI6IFsyMDk3MTUy Li40MTk0MzAzXTogICAxMjU4MzAwOC4uMTQ2ODAxNTkgICAgMCAoMTI1ODMwMDguLjE0NjgwMTU5 KSAgICAyMDk3MTUyCj4gICAgMzogWzQxOTQzMDQuLjgzODg2MDddOiAgIDI1MTY1OTIwLi4yOTM2 MDIyMyAgICAwICgyNTE2NTkyMC4uMjkzNjAyMjMpICAgIDQxOTQzMDQKPiAgICA0OiBbODM4ODYw OC4uMTY3NzcyMTVdOiAgNTg3MjAzNTIuLjY3MTA4OTU5ICAgIDAgKDU4NzIwMzUyLi42NzEwODk1 OSkgICAgODM4ODYwOAo+ICAgIDU6IFsxNjc3NzIxNi4uMzM1NTQ0MjNdOiAxMTc0NDA1ODQuLjEz NDIxNzc5MSAgMCAoMTE3NDQwNTg0Li4xMzQyMTc3OTEpIDE2Nzc3MjA4Cj4gICAgNjogWzMzNTU0 NDI0Li41MDMzMTUxMV06IDE4NDU0OTA1Ni4uMjAxMzI2MTQzICAwICgxODQ1NDkwNTYuLjIwMTMy NjE0MykgMTY3NzcwODgKPiAgICA3OiBbNTAzMzE1MTIuLjY3MTA4NTk5XTogMjUxNjU3NDA4Li4y Njg0MzQ0OTUgIDAgKDI1MTY1NzQwOC4uMjY4NDM0NDk1KSAxNjc3NzA4OAo+IAo+IGFuZCBmb3Ig MTYgY29uY3VycmVudCAxNkdCIGZpbGUgd3JpdGVzOgo+IAo+ICBFWFQ6IEZJTEUtT0ZGU0VUICAg ICAgICAgICBCTE9DSy1SQU5HRSAgICAgICAgICBBRyBBRy1PRkZTRVQgICAgICAgICAgICAgICAg IFRPVEFMCj4gICAgMDogWzAuLjI2MjE0M106ICAgICAgICAgIDI0OTA0NzIuLjI3NTI2MTUgICAg ICAwICgyNDkwNDcyLi4yNzUyNjE1KSAgICAgICAyNjIxNDQKPiAgICAxOiBbMjYyMTQ0Li41MjQy ODddOiAgICAgNjI5MTU2MC4uNjU1MzcwMyAgICAgIDAgKDYyOTE1NjAuLjY1NTM3MDMpICAgICAg IDI2MjE0NAo+ICAgIDI6IFs1MjQyODguLjEwNDg1NzVdOiAgICAxMzYzMTU5Mi4uMTQxNTU4Nzkg ICAgMCAoMTM2MzE1OTIuLjE0MTU1ODc5KSAgICAgNTI0Mjg4Cj4gICAgMzogWzEwNDg1NzYuLjIw OTcxNTFdOiAgIDMwNDA4ODA4Li4zMTQ1NzM4MyAgICAwICgzMDQwODgwOC4uMzE0NTczODMpICAg IDEwNDg1NzYKPiAgICA0OiBbMjA5NzE1Mi4uNDE5NDMwM106ICAgNTI0Mjg5MDQuLjU0NTI2MDU1 ICAgIDAgKDUyNDI4OTA0Li41NDUyNjA1NSkgICAgMjA5NzE1Mgo+ICAgIDU6IFs0MTk0MzA0Li44 Mzg4NjA3XTogICAxMDQ4NTc3MDQuLjEwOTA1MjAwNyAgMCAoMTA0ODU3NzA0Li4xMDkwNTIwMDcp ICA0MTk0MzA0Cj4gICAgNjogWzgzODg2MDguLjE2Nzc3MjE1XTogIDIwOTcxNTMwNC4uMjE4MTAz OTExICAwICgyMDk3MTUzMDQuLjIxODEwMzkxMSkgIDgzODg2MDgKPiAgICA3OiBbMTY3NzcyMTYu LjMzNTU0NDIzXTogNDUyOTg0ODQ4Li40Njk3NjIwNTUgIDAgKDQ1Mjk4NDg0OC4uNDY5NzYyMDU1 KSAxNjc3NzIwOAo+IAo+IEJlY2F1c2UgaXQgaXMgaGFyZCB0byB0YWtlIGJhY2sgc3BlY3VhbHRp dmUgcHJlYWxsb2NhdGlvbiwgY2FzZXMKPiB3aGVyZSB0aGVyZSBhcmUgbGFyZ2Ugc2xvdyBncm93 aW5nIGxvZyBmaWxlcyBvbiBhIG5lYXJseSBmdWxsCj4gZmlsZXN5c3RlbSBtYXkgY2F1c2UgcHJl bWF0dXJlIEVOT1NQQy4gSGVuY2UgYXMgdGhlIGZpbGVzeXN0ZW0gbmVhcnMKPiBmdWxsLCB0aGUg bWF4aW11bSBkeW5hbWljIHByZWFsbG9jIHNpemUg0ZZzIHJlZHVjZWQgYWNjb3JkaW5nIHRvIHRo aXMKPiB0YWJsZSAoYmFzZWQgb24gNGsgYmxvY2sgc2l6ZSk6Cj4gCj4gZnJlZXNwYWNlICAgICAg IG1heCBwcmVhbGxvYyBzaXplCj4gICA+NSUgICAgICAgICAgICAgZnVsbCBleHRlbnQgKDhHQikK PiAgIDQtNSUgICAgICAgICAgICAgMkdCICg4R0IgPj4gMikKPiAgIDMtNCUgICAgICAgICAgICAg MUdCICg4R0IgPj4gMykKPiAgIDItMyUgICAgICAgICAgIDUxMk1CICg4R0IgPj4gNCkKPiAgIDEt MiUgICAgICAgICAgIDI1Nk1CICg4R0IgPj4gNSkKPiAgIDwxJSAgICAgICAgICAgIDEyOE1CICg4 R0IgPj4gNikKCk9uIHJlYWxseSBzbWFsbCBmaWxlc3lzdGVtcyB0aGlzIG1pZ2h0IGJlIGV4Y2Vz c2l2ZS4KT24gdGhlIG90aGVyIGhhbmQsIHlvdSdyZSBhbHJlYWR5IGJhc2luZyB0aGUgc2l6ZSBv bgp0aGUgZmlsZSBzaXplIHNvIHRoYXQgc2hvdWxkIGxpbWl0IHRoaW5ncyBqdXN0IGZpbmUuCgo+ IFRoaXMgc2hvdWxkIHJlZHVjZSB0aGUgYW1vdW50IG9mIHNwYWNlIGhlbGQgaW4gc3BlY3VsYXRp dmUKPiBwcmVhbGxvY2F0aW9uIGZvciBzdWNoIGNhc2VzLgo+IAo+IFRoZSBhbGxvY3NpemUgbW91 bnQgb3B0aW9uIHR1cm5zIG9mZiB0aGUgZHluYW1pYyBiZWhhdmlvdXIgYW5kIGZpeGVzCj4gdGhl IHByZWFsbG9jIHNpemUgdG8gd2hhdGV2ZXIgdGhlIG1vdW50IG9wdGlvbiBzcGVjaWZpZXMuIGku ZS4gdGhlCj4gYmVoYXZpb3VyIGlzIHVuY2hhbmdlZC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBEYXZl IENoaW5uZXIgPGRjaGlubmVyQHJlZGhhdC5jb20+Cj4gLS0tCj4gIGZzL3hmcy94ZnNfZnNvcHMu YyB8ICAgIDEgKwo+ICBmcy94ZnMveGZzX2lvbWFwLmMgfCAgIDg0ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQo+ICBmcy94ZnMveGZzX21vdW50LmMg fCAgIDIxICsrKysrKysrKysrKysKPiAgZnMveGZzL3hmc19tb3VudC5oIHwgICAxNCArKysrKysr Kwo+ICA0IGZpbGVzIGNoYW5nZWQsIDExMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkK PiAKPiBkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc29wcy5jIGIvZnMveGZzL3hmc19mc29wcy5j Cj4gaW5kZXggYmUzNGZmMi4uNmQxNzIwNiAxMDA2NDQKPiAtLS0gYS9mcy94ZnMveGZzX2Zzb3Bz LmMKPiArKysgYi9mcy94ZnMveGZzX2Zzb3BzLmMKPiBAQCAtMzc0LDYgKzM3NCw3IEBAIHhmc19n cm93ZnNfZGF0YV9wcml2YXRlKAo+ICAJCW1wLT5tX21heGljb3VudCA9IGljb3VudCA8PCBtcC0+ bV9zYi5zYl9pbm9wYmxvZzsKPiAgCX0gZWxzZQo+ICAJCW1wLT5tX21heGljb3VudCA9IDA7Cj4g Kwl4ZnNfc2V0X2xvd19zcGFjZV90aHJlc2hvbGRzKG1wKTsKPiAgCj4gIAkvKiB1cGRhdGUgc2Vj b25kYXJ5IHN1cGVyYmxvY2tzLiAqLwo+ICAJZm9yIChhZ25vID0gMTsgYWdubyA8IG5hZ2NvdW50 OyBhZ25vKyspIHsKPiBkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hm c19pb21hcC5jCj4gaW5kZXggMjJiNjJhMS4uZjM2ZDJjOCAxMDA2NDQKPiAtLS0gYS9mcy94ZnMv eGZzX2lvbWFwLmMKPiArKysgYi9mcy94ZnMveGZzX2lvbWFwLmMKPiBAQCAtMjY3LDYgKzI2Nyw5 IEBAIGVycm9yX291dDoKPiAgICogSWYgdGhlIGNhbGxlciBpcyBkb2luZyBhIHdyaXRlIGF0IHRo ZSBlbmQgb2YgdGhlIGZpbGUsIHRoZW4gZXh0ZW5kIHRoZQo+ICAgKiBhbGxvY2F0aW9uIG91dCB0 byB0aGUgZmlsZSBzeXN0ZW0ncyB3cml0ZSBpb3NpemUuICBXZSBjbGVhbiB1cCBhbnkgZXh0cmEK PiAgICogc3BhY2UgbGVmdCBvdmVyIHdoZW4gdGhlIGZpbGUgaXMgY2xvc2VkIGluIHhmc19pbmFj dGl2ZSgpLgo+ICsgKgo+ICsgKiBJZiB3ZSBmaW5kIHdlIGFscmVhZHkgaGF2ZSBkZWxhbGxvYyBw cmVhbGxvY2F0aW9uIGJleW9uZCBFT0YsIGRvbid0IGRvIG1vcmUKPiArICogcHJlYWxsb2NhdGlv biBhcyBpdCBpdCBub3QgbmVlZGVkLgo+ICAgKi8KPiAgU1RBVElDIGludAo+ICB4ZnNfaW9tYXBf ZW9mX3dhbnRfcHJlYWxsb2NhdGUoCj4gQEAgLTI4Miw2ICsyODUsNyBAQCB4ZnNfaW9tYXBfZW9m X3dhbnRfcHJlYWxsb2NhdGUoCj4gIAl4ZnNfZmlsYmxrc190ICAgY291bnRfZnNiOwo+ICAJeGZz X2ZzYmxvY2tfdAlmaXJzdGJsb2NrOwo+ICAJaW50CQluLCBlcnJvciwgaW1hcHM7Cj4gKwlpbnQJ CWZvdW5kX2RlbGFsbG9jID0gMDsKPiAgCj4gIAkqcHJlYWxsb2MgPSAwOwo+ICAJaWYgKChvZmZz ZXQgKyBjb3VudCkgPD0gaXAtPmlfc2l6ZSkKPiBAQCAtMzA2LDEyICszMTAsNjAgQEAgeGZzX2lv bWFwX2VvZl93YW50X3ByZWFsbG9jYXRlKAo+ICAJCQkJcmV0dXJuIDA7Cj4gIAkJCXN0YXJ0X2Zz YiArPSBpbWFwW25dLmJyX2Jsb2NrY291bnQ7Cj4gIAkJCWNvdW50X2ZzYiAtPSBpbWFwW25dLmJy X2Jsb2NrY291bnQ7Cj4gKwo+ICsJCQlpZiAoaW1hcFtuXS5icl9zdGFydGJsb2NrID09IERFTEFZ U1RBUlRCTE9DSykKPiArCQkJCWZvdW5kX2RlbGFsbG9jID0gMTsKPiAgCQl9Cj4gIAl9Cj4gLQkq cHJlYWxsb2MgPSAxOwo+ICsJaWYgKCFmb3VuZF9kZWxhbGxvYykKPiArCQkqcHJlYWxsb2MgPSAx OwoKSXNuJ3QgdGhpcyBhIHNlcGFyYXRlIGNoYW5nZSwgcG9zc2libHkgd29ydGh5IG9mIGl0cwpv d24gY29tbWl0PwoKPiAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gKy8qCj4gKyAqIElmIHdlIGRvbid0 IGhhdmUgYSB1c2VyIHNwZWNpZmllZCBwcmVhbGxvY2F0aW9uIHNpemUsIGR5bmFtaWNhbGx5IGlu Y3JlYXNlCj4gKyAqIHRoZSBwcmVhbGxvY2F0aW9uIHNpemUgYXMgdGhlIHNpemUgb2YgdGhlIGZp bGUgZ3Jvd3MuIENhcCB0aGUgbWF4aW11bSBzaXplCj4gKyAqIGF0IGEgc2luZ2xlIGV4dGVudCBv ciBsZXNzIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG5lYXIgZnVsbC4gVGhlIGNsb3NlciB0aGUKPiAr ICogZmlsZXN5c3RlbSBpcyB0byBmdWxsLCB0aGUgc21hbGxlciB0aGUgbWF4aW11bSBwcmVhbG9j YXRpb24uCj4gKyAqLwo+ICtTVEFUSUMgeGZzX2ZzYmxvY2tfdAo+ICt4ZnNfaW9tYXBfcHJlYWxs b2Nfc2l6ZSgKPiArCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAo+ICsJc3RydWN0IHhmc19pbm9kZQkq aXApCj4gK3sKPiArCXhmc19mc2Jsb2NrX3QJCWFsbG9jX2Jsb2NrcyA9IDA7Cj4gKwo+ICsJaWYg KCEobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfREZMVF9JT1NJWkUpKSB7Cj4gKwkJaW50IHNoaWZ0 ID0gMDsKPiArCQlpbnQ2NF90IGZyZWVzcDsKPiArCj4gKwkJYWxsb2NfYmxvY2tzID0gWEZTX0Jf VE9fRlNCKG1wLCBpcC0+aV9zaXplKTsKCldoeSBub3QgaV9zaXplX3JlYWQoKT8gIE9ubHkgbWF0 dGVycyBmb3IgMzItYml0LCBidXQKeW91J3JlIHVzaW5nIGRvX2RpdigpIGJlbG93IHNvIHlvdSBk byBzZWVtIHRvIGNhcmUKYWJvdXQgaXQgc29tZXRpbWVzLgoKPiArCQlhbGxvY19ibG9ja3MgPSBY RlNfRklMRU9GRl9NSU4oTUFYRVhUTEVOLAo+ICsJCQkJCXJvdW5kZG93bl9wb3dfb2ZfdHdvKGFs bG9jX2Jsb2NrcykpOwo+ICsKPiArCQlmcmVlc3AgPSBwZXJjcHVfY291bnRlcl9yZWFkX3Bvc2l0 aXZlKAo+ICsJCQkJCQkmbXAtPm1faWNzYltYRlNfSUNTQl9GREJMT0NLU10pOwo+ICsJCWlmIChm cmVlc3AgPCBtcC0+bV9sb3dfc3BhY2VbWEZTX0xPV1NQXzVfUENOVF0pIHsKPiArCQkJc2hpZnQg PSAyOwo+ICsJCQlpZiAoZnJlZXNwIDwgbXAtPm1fbG93X3NwYWNlW1hGU19MT1dTUF80X1BDTlRd KQo+ICsJCQkJc2hpZnQrKzsKPiArCQkJaWYgKGZyZWVzcCA8IG1wLT5tX2xvd19zcGFjZVtYRlNf TE9XU1BfM19QQ05UXSkKPiArCQkJCXNoaWZ0Kys7Cj4gKwkJCWlmIChmcmVlc3AgPCBtcC0+bV9s b3dfc3BhY2VbWEZTX0xPV1NQXzJfUENOVF0pCj4gKwkJCQlzaGlmdCsrOwo+ICsJCQlpZiAoZnJl ZXNwIDwgbXAtPm1fbG93X3NwYWNlW1hGU19MT1dTUF8xX1BDTlRdKQo+ICsJCQkJc2hpZnQrKzsK PiArCQl9Cj4gKwkJaWYgKHNoaWZ0KQo+ICsJCQlhbGxvY19ibG9ja3MgPj49IHNoaWZ0Owo+ICsJ fQo+ICsKPiArCWlmIChhbGxvY19ibG9ja3MgPCBtcC0+bV93cml0ZWlvX2Jsb2NrcykKPiArCQlh bGxvY19ibG9ja3MgPSBtcC0+bV93cml0ZWlvX2Jsb2NrczsKPiArCj4gKwlyZXR1cm4gYWxsb2Nf YmxvY2tzOwo+ICt9Cj4gKwo+ICBpbnQKPiAgeGZzX2lvbWFwX3dyaXRlX2RlbGF5KAo+ICAJeGZz X2lub2RlX3QJKmlwLAo+IEBAIC0zNDQsNiArMzk2LDcgQEAgeGZzX2lvbWFwX3dyaXRlX2RlbGF5 KAo+ICAJZXh0c3ogPSB4ZnNfZ2V0X2V4dHN6X2hpbnQoaXApOwo+ICAJb2Zmc2V0X2ZzYiA9IFhG U19CX1RPX0ZTQlQobXAsIG9mZnNldCk7Cj4gIAo+ICsKCkV4dHJhIGJsYW5rIGxpbmUuCgo+IAll cnJvciA9IHhmc19pb21hcF9lb2Zfd2FudF9wcmVhbGxvY2F0ZShtcCwgaXAsIG9mZnNldCwgY291 bnQsCj4gIAkJCQlpbWFwLCBYRlNfV1JJVEVfSU1BUFMsICZwcmVhbGxvYyk7Cj4gIAlpZiAoZXJy b3IpCj4gQEAgLTM1MSw5ICs0MDQsMTEgQEAgeGZzX2lvbWFwX3dyaXRlX2RlbGF5KAo+ICAKPiAg cmV0cnk6Cj4gIAlpZiAocHJlYWxsb2MpIHsKPiArCQl4ZnNfZnNibG9ja190CWFsbG9jX2Jsb2Nr cyA9IHhmc19pb21hcF9wcmVhbGxvY19zaXplKG1wLCBpcCk7Cj4gKwo+ICAJCWFsaWduZWRfb2Zm c2V0ID0gWEZTX1dSSVRFSU9fQUxJR04obXAsIChvZmZzZXQgKyBjb3VudCAtIDEpKTsKPiAgCQlp b2FsaWduID0gWEZTX0JfVE9fRlNCVChtcCwgYWxpZ25lZF9vZmZzZXQpOwo+IC0JCWxhc3RfZnNi ID0gaW9hbGlnbiArIG1wLT5tX3dyaXRlaW9fYmxvY2tzOwo+ICsJCWxhc3RfZnNiID0gaW9hbGln biArIGFsbG9jX2Jsb2NrczsKPiAgCX0gZWxzZSB7Cj4gIAkJbGFzdF9mc2IgPSBYRlNfQl9UT19G U0IobXAsICgoeGZzX3Vmc2l6ZV90KShvZmZzZXQgKyBjb3VudCkpKTsKPiAgCX0KPiBAQCAtMzcx LDIyICs0MjYsMzEgQEAgcmV0cnk6Cj4gIAkJCSAgWEZTX0JNQVBJX0RFTEFZIHwgWEZTX0JNQVBJ X1dSSVRFIHwKPiAgCQkJICBYRlNfQk1BUElfRU5USVJFLCAmZmlyc3RibG9jaywgMSwgaW1hcCwK PiAgCQkJICAmbmltYXBzLCBOVUxMKTsKPiAtCWlmIChlcnJvciAmJiAoZXJyb3IgIT0gRU5PU1BD KSkKPiArCXN3aXRjaCAoZXJyb3IpIHsKPiArCWNhc2UgMDoKPiArCWNhc2UgRU5PU1BDOgo+ICsJ Y2FzZSBFRFFVT1Q6Cj4gKwkJYnJlYWs7CgpUaGlzIChhYm92ZSBhbmQgYmVsb3csIGluIHRoaXMg aHVuaykgaXMgYWxzbyBhIHNlcGFyYXRlCmNoYW5nZSwgcG9zc2libHkgd29ydGh5IG9mIGl0cyBv d24gc21hbGwgY29tbWl0LgoKPiArCWRlZmF1bHQ6Cj4gIAkJcmV0dXJuIFhGU19FUlJPUihlcnJv cik7Cj4gKwl9Cj4gIAo+ICAJLyoKPiAtCSAqIElmIGJtYXBpIHJldHVybmVkIHVzIG5vdGhpbmcs IGFuZCBpZiB3ZSBkaWRuJ3QgZ2V0IGJhY2sgRURRVU9ULAo+IC0JICogdGhlbiB3ZSBtdXN0IGhh dmUgcnVuIG91dCBvZiBzcGFjZSAtIGZsdXNoIGFsbCBvdGhlciBpbm9kZXMgd2l0aAo+IC0JICog ZGVsYWxsb2MgYmxvY2tzIGFuZCByZXRyeSB3aXRob3V0IEVPRiBwcmVhbGxvY2F0aW9uLgo+ICsJ ICogSWYgYm1hcGkgcmV0dXJuZWQgdXMgbm90aGluZywgd2UgZ290IGVpdGhlciBFTk9TUEMgb3Ig RURRVU9ULiAgRm9yCj4gKwkgKiBFTk9TUEMsICogZmx1c2ggYWxsIG90aGVyIGlub2RlcyB3aXRo IGRlbGFsbG9jIGJsb2NrcyB0byBmcmVlIHVwCj4gKwkgKiBzb21lIG9mIHRoZSBleGNlc3MgcmVz ZXJ2ZWQgbWV0YWRhdGEgc3BhY2UuIEZvciBib3RoIGNhc2VzLCByZXRyeQo+ICsJICogd2l0aG91 dCBFT0YgcHJlYWxsb2NhdGlvbi4KPiAgCSAqLwo+ICAJaWYgKG5pbWFwcyA9PSAwKSB7Cj4gIAkJ dHJhY2VfeGZzX2RlbGFsbG9jX2Vub3NwYyhpcCwgb2Zmc2V0LCBjb3VudCk7Cj4gIAkJaWYgKGZs dXNoZWQpCj4gLQkJCXJldHVybiBYRlNfRVJST1IoRU5PU1BDKTsKPiArCQkJcmV0dXJuIFhGU19F UlJPUihlcnJvciA/IGVycm9yIDogRU5PU1BDKTsKPiAgCj4gLQkJeGZzX2l1bmxvY2soaXAsIFhG U19JTE9DS19FWENMKTsKPiAtCQl4ZnNfZmx1c2hfaW5vZGVzKGlwKTsKPiAtCQl4ZnNfaWxvY2so aXAsIFhGU19JTE9DS19FWENMKTsKPiArCQlpZiAoZXJyb3IgPT0gRU5PU1BDKSB7Cj4gKwkJCXhm c19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Cj4gKwkJCXhmc19mbHVzaF9pbm9kZXMoaXAp Owo+ICsJCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKPiArCQl9Cj4gIAo+ICAJCWZs dXNoZWQgPSAxOwo+ICAJCWVycm9yID0gMDsKPiBkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3Vu dC5jIGIvZnMveGZzL3hmc19tb3VudC5jCj4gaW5kZXggZDU3MTAyMzIuLmYxYjA5NGQgMTAwNjQ0 Cj4gLS0tIGEvZnMveGZzL3hmc19tb3VudC5jCj4gKysrIGIvZnMveGZzL3hmc19tb3VudC5jCj4g QEAgLTExMDEsNiArMTEwMSwyNCBAQCB4ZnNfc2V0X3J3X3NpemVzKHhmc19tb3VudF90ICptcCkK PiAgfQo+ICAKPiAgLyoKPiArICogcHJlY2FsY3VsYXRlIHRoZSBsb3cgc3BhY2UgdGhyZXNob2xk cyBmb3IgZHluYW1pYyBzcGVjdWxhdGl2ZSBwcmVhbGxvY2F0aW9uLgo+ICsgKi8KPiArdm9pZAo+ ICt4ZnNfc2V0X2xvd19zcGFjZV90aHJlc2hvbGRzKAo+ICsJc3RydWN0IHhmc19tb3VudAkqbXAp Cj4gK3sKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBYRlNfTE9XU1BfTUFYOyBp KyspIHsKPiArCQlfX3VpbnQ2NF90IHNwYWNlID0gbXAtPm1fc2Iuc2JfZGJsb2NrczsKPiArCj4g KwkJZG9fZGl2KHNwYWNlLCAxMDApOwoKSG93IGFib3V0IGNvbXB1dGluZyB0aGlzIG9uY2UsIG91 dHNpZGUgdGhlIGxvb3A/Cgo+ICsJCW1wLT5tX2xvd19zcGFjZVtpXSA9IHNwYWNlICogKGkgKyAx KTsKPiArCX0KPiArfQo+ICsKPiArCj4gKy8qCj4gICAqIFNldCB3aGV0aGVyIHdlJ3JlIHVzaW5n IGlub2RlIGFsaWdubWVudC4KPiAgICovCj4gIFNUQVRJQyB2b2lkCj4gQEAgLTEzMjIsNiArMTM0 MCw5IEBAIHhmc19tb3VudGZzKAo+ICAJICovCj4gIAl4ZnNfc2V0X3J3X3NpemVzKG1wKTsKPiAg Cj4gKwkvKiBzZXQgdGhlIGxvdyBzcGFjZSB0aHJlc2hvbGRzIGZvciBkeW5hbWljIHByZWFsbG9j YXRpb24gKi8KPiArCXhmc19zZXRfbG93X3NwYWNlX3RocmVzaG9sZHMobXApOwo+ICsKPiAgCS8q Cj4gIAkgKiBTZXQgdGhlIGlub2RlIGNsdXN0ZXIgc2l6ZS4KPiAgCSAqIFRoaXMgbWF5IHN0aWxs IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGZpbGUgc3lzdGVtCj4gZGlmZiAtLWdpdCBhL2ZzL3hmcy94 ZnNfbW91bnQuaCBiL2ZzL3hmcy94ZnNfbW91bnQuaAo+IGluZGV4IDAzYWQyNWM2Li43YjQyZTA0 IDEwMDY0NAo+IC0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaAo+ICsrKyBiL2ZzL3hmcy94ZnNfbW91 bnQuaAo+IEBAIC03NSw2ICs3NSwxNiBAQCBlbnVtIHsKPiAgCVhGU19JQ1NCX01BWCwKPiAgfTsK PiAgCj4gKy8qIGR5bmFtaWMgcHJlYWxsb2NhdGlvbiBmcmVlIHNwYWNlIHRocmVzaG9sZHMsIDUl IGRvd24gdG8gMSUgKi8KPiArZW51bSB7Cj4gKwlYRlNfTE9XU1BfMV9QQ05UID0gMCwKCldoeSBu b3QgbWFrZSAxJSBiZSAxLCAyJSBiZSAyLCBldGMuPwoKPiArCVhGU19MT1dTUF8yX1BDTlQsCj4g KwlYRlNfTE9XU1BfM19QQ05ULAo+ICsJWEZTX0xPV1NQXzRfUENOVCwKPiArCVhGU19MT1dTUF81 X1BDTlQsCj4gKwlYRlNfTE9XU1BfTUFYLAo+ICt9Owo+ICsKPiAgdHlwZWRlZiBzdHJ1Y3QgeGZz X21vdW50IHsKPiAgCXN0cnVjdCBzdXBlcl9ibG9jawkqbV9zdXBlcjsKPiAgCXhmc190aWRfdAkJ bV90aWQ7CQkvKiBuZXh0IHVudXNlZCB0aWQgZm9yIGZzICovCj4gQEAgLTE2OSw2ICsxNzksOCBA QCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQgewo+ICAJCQkJCQkgICBvbiB0aGUgbmV4dCByZW1v dW50LHJ3ICovCj4gIAlzdHJ1Y3Qgc2hyaW5rZXIJCW1faW5vZGVfc2hyaW5rOwkvKiBpbm9kZSBy ZWNsYWltIHNocmlua2VyICovCj4gIAlzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIJbV9pY3NiW1hGU19J Q1NCX01BWF07Cj4gKwlpbnQ2NF90CQkJbV9sb3dfc3BhY2VbWEZTX0xPV1NQX01BWF07Cj4gKwkJ CQkJCS8qIGxvdyBmcmVlIHNwYWNlIHRocmVzaG9sZHMgKi8KPiAgfSB4ZnNfbW91bnRfdDsKPiAg Cj4gIC8qCj4gQEAgLTMzMyw2ICszNDUsOCBAQCBleHRlcm4gdm9pZAl4ZnNfaWNzYl9zeW5jX2Nv dW50ZXJzKHN0cnVjdCB4ZnNfbW91bnQgKik7Cj4gIGV4dGVybiBpbnQJeGZzX2ljc2JfbW9kaWZ5 X2lub2RlcyhzdHJ1Y3QgeGZzX21vdW50ICosIGludCwgaW50NjRfdCk7Cj4gIGV4dGVybiBpbnQJ eGZzX2ljc2JfbW9kaWZ5X2ZyZWVfYmxvY2tzKHN0cnVjdCB4ZnNfbW91bnQgKiwgaW50NjRfdCwg aW50KTsKPiAgCj4gK2V4dGVybiB2b2lkCXhmc19zZXRfbG93X3NwYWNlX3RocmVzaG9sZHMoc3Ry dWN0IHhmc19tb3VudCAqKTsKPiArCj4gICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCj4gIAo+ICBl eHRlcm4gdm9pZAl4ZnNfbW9kX3NiKHN0cnVjdCB4ZnNfdHJhbnMgKiwgX19pbnQ2NF90KTsKCgoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnhmcyBtYWls aW5nIGxpc3QKeGZzQG9zcy5zZ2kuY29tCmh0dHA6Ly9vc3Muc2dpLmNvbS9tYWlsbWFuL2xpc3Rp bmZvL3hmcwo=