From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id oBD1P0oN148061 for ; Sun, 12 Dec 2010 19:25:00 -0600 Received: from mail.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 435AE1CBC343 for ; Sun, 12 Dec 2010 17:26:49 -0800 (PST) Received: from mail.internode.on.net (bld-mail12.adl6.internode.on.net [150.101.137.97]) by cuda.sgi.com with ESMTP id DU7H8Yrr3ibITUTJ for ; Sun, 12 Dec 2010 17:26:49 -0800 (PST) Received: from dastard (unverified [121.44.88.148]) by mail.internode.on.net (SurgeMail 3.8f2) with ESMTP id 49733300-1927428 for ; Mon, 13 Dec 2010 11:56:48 +1030 (CDT) Received: from chute ([192.168.1.1] helo=disappointment) by dastard with esmtp (Exim 4.72) (envelope-from ) id 1PRxBf-0001lw-6o for xfs@oss.sgi.com; Mon, 13 Dec 2010 12:26:47 +1100 Received: from dave by disappointment with local (Exim 4.72) (envelope-from ) id 1PRxAB-00045s-QA for xfs@oss.sgi.com; Mon, 13 Dec 2010 12:25:15 +1100 From: Dave Chinner Subject: [PATCH 1/2] xfs: dynamic speculative EOF preallocation Date: Mon, 13 Dec 2010 12:25:10 +1100 Message-Id: <1292203511-15685-2-git-send-email-david@fromorbit.com> In-Reply-To: <1292203511-15685-1-git-send-email-david@fromorbit.com> References: <1292203511-15685-1-git-send-email-david@fromorbit.com> 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: xfs@oss.sgi.com RnJvbTogRGF2ZSBDaGlubmVyIDxkY2hpbm5lckByZWRoYXQuY29tPgoKQ3VycmVudGx5IHRoZSBz aXplIG9mIHRoZSBzcGVjdWxhdGl2ZSBwcmVhbGxvY2F0aW9uIGR1cmluZyBkZWxheWVkCmFsbG9j YXRpb24gaXMgZml4ZWQgYnkgZWl0aGVyIHRoZSBhbGxvY3NpemUgbW91bnQgb3B0aW9uIG9mIGEK ZGVmYXVsdCBzaXplLiBXZSBhcmUgc2VlaW5nIGEgbG90IG9mIGNhc2VzIHdoZXJlIHdlIG5lZWQg dG8KcmVjb21tZW5kIHVzaW5nIHRoZSBhbGxvY3NpemUgbW91bnQgb3B0aW9uIHRvIHByZXZlbnQg ZnJhZ21lbnRhdGlvbgp3aGVuIGJ1ZmZlcmVkIHdyaXRlcyBsYW5kIGluIHRoZSBzYW1lIEFHLgoK UmF0aGVyIHRoYW4gdXNpbmcgYSBmaXhlZCBwcmVhbGxvY2F0aW9uIHNpemUgYnkgZGVmYXVsdCAo dXAgdG8gNjRrKSwKbWFrZSBpdCBkeW5hbWljIGJ5IGJhc2luZyBpdCBvbiB0aGUgY3VycmVudCBp bm9kZSBzaXplLiBUaGF0IHdheSB0aGUKRU9GIHByZWFsbG9jYXRpb24gd2lsbCBpbmNyZWFzZSBh cyB0aGUgZmlsZSBzaXplIGluY3JlYXNlcy4gIEhlbmNlCmZvciBzdHJlYW1pbmcgd3JpdGVzIHdl IGFyZSBtdWNoIG1vcmUgbGlrZWx5IHRvIGdldCBsYXJnZQpwcmVhbGxvY2F0aW9ucyBleGFjdGx5 IHdoZW4gd2UgbmVlZCBpdCB0byByZWR1Y2UgZnJhZ2VtZW50YXRpb24uCgpGb3IgZGVmYXVsdCBz ZXR0aW5ncywgdGhlIHNpemUgb2YgdGhlIGluaXRpYWwgZXh0ZW50cyBpcyBkZXRlcm1pbmVkCmJ5 IHRoZSBudW1iZXIgb2YgcGFyYWxsZWwgd3JpdGVycyBhbmQgdGhlIGFtb3VudCBvZiBtZW1vcnkg aW4gdGhlCm1hY2hpbmUuIEZvciA0R0IgUkFNIGFuZCA0IGNvbmN1cnJlbnQgMzJHQiBmaWxlIHdy aXRlczoKCkVYVDogRklMRS1PRkZTRVQgICAgICAgICAgIEJMT0NLLVJBTkdFICAgICAgICAgIEFH IEFHLU9GRlNFVCAgICAgICAgICAgICAgICAgVE9UQUwKICAgMDogWzAuLjEwNDg1NzVdOiAgICAg ICAgIDEwNDg2NzIuLjIwOTcyNDcgICAgICAwICgxMDQ4NjcyLi4yMDk3MjQ3KSAgICAgIDEwNDg1 NzYKICAgMTogWzEwNDg1NzYuLjIwOTcxNTFdOiAgIDUyNDI5NzYuLjYyOTE1NTEgICAgICAwICg1 MjQyOTc2Li42MjkxNTUxKSAgICAgIDEwNDg1NzYKICAgMjogWzIwOTcxNTIuLjQxOTQzMDNdOiAg IDEyNTgzMDA4Li4xNDY4MDE1OSAgICAwICgxMjU4MzAwOC4uMTQ2ODAxNTkpICAgIDIwOTcxNTIK ICAgMzogWzQxOTQzMDQuLjgzODg2MDddOiAgIDI1MTY1OTIwLi4yOTM2MDIyMyAgICAwICgyNTE2 NTkyMC4uMjkzNjAyMjMpICAgIDQxOTQzMDQKICAgNDogWzgzODg2MDguLjE2Nzc3MjE1XTogIDU4 NzIwMzUyLi42NzEwODk1OSAgICAwICg1ODcyMDM1Mi4uNjcxMDg5NTkpICAgIDgzODg2MDgKICAg NTogWzE2Nzc3MjE2Li4zMzU1NDQyM106IDExNzQ0MDU4NC4uMTM0MjE3NzkxICAwICgxMTc0NDA1 ODQuLjEzNDIxNzc5MSkgMTY3NzcyMDgKICAgNjogWzMzNTU0NDI0Li41MDMzMTUxMV06IDE4NDU0 OTA1Ni4uMjAxMzI2MTQzICAwICgxODQ1NDkwNTYuLjIwMTMyNjE0MykgMTY3NzcwODgKICAgNzog WzUwMzMxNTEyLi42NzEwODU5OV06IDI1MTY1NzQwOC4uMjY4NDM0NDk1ICAwICgyNTE2NTc0MDgu LjI2ODQzNDQ5NSkgMTY3NzcwODgKCmFuZCBmb3IgMTYgY29uY3VycmVudCAxNkdCIGZpbGUgd3Jp dGVzOgoKIEVYVDogRklMRS1PRkZTRVQgICAgICAgICAgIEJMT0NLLVJBTkdFICAgICAgICAgIEFH IEFHLU9GRlNFVCAgICAgICAgICAgICAgICAgVE9UQUwKICAgMDogWzAuLjI2MjE0M106ICAgICAg ICAgIDI0OTA0NzIuLjI3NTI2MTUgICAgICAwICgyNDkwNDcyLi4yNzUyNjE1KSAgICAgICAyNjIx NDQKICAgMTogWzI2MjE0NC4uNTI0Mjg3XTogICAgIDYyOTE1NjAuLjY1NTM3MDMgICAgICAwICg2 MjkxNTYwLi42NTUzNzAzKSAgICAgICAyNjIxNDQKICAgMjogWzUyNDI4OC4uMTA0ODU3NV06ICAg IDEzNjMxNTkyLi4xNDE1NTg3OSAgICAwICgxMzYzMTU5Mi4uMTQxNTU4NzkpICAgICA1MjQyODgK ICAgMzogWzEwNDg1NzYuLjIwOTcxNTFdOiAgIDMwNDA4ODA4Li4zMTQ1NzM4MyAgICAwICgzMDQw ODgwOC4uMzE0NTczODMpICAgIDEwNDg1NzYKICAgNDogWzIwOTcxNTIuLjQxOTQzMDNdOiAgIDUy NDI4OTA0Li41NDUyNjA1NSAgICAwICg1MjQyODkwNC4uNTQ1MjYwNTUpICAgIDIwOTcxNTIKICAg NTogWzQxOTQzMDQuLjgzODg2MDddOiAgIDEwNDg1NzcwNC4uMTA5MDUyMDA3ICAwICgxMDQ4NTc3 MDQuLjEwOTA1MjAwNykgIDQxOTQzMDQKICAgNjogWzgzODg2MDguLjE2Nzc3MjE1XTogIDIwOTcx NTMwNC4uMjE4MTAzOTExICAwICgyMDk3MTUzMDQuLjIxODEwMzkxMSkgIDgzODg2MDgKICAgNzog WzE2Nzc3MjE2Li4zMzU1NDQyM106IDQ1Mjk4NDg0OC4uNDY5NzYyMDU1ICAwICg0NTI5ODQ4NDgu LjQ2OTc2MjA1NSkgMTY3NzcyMDgKCkJlY2F1c2UgaXQgaXMgaGFyZCB0byB0YWtlIGJhY2sgc3Bl Y3VhbHRpdmUgcHJlYWxsb2NhdGlvbiwgY2FzZXMKd2hlcmUgdGhlcmUgYXJlIGxhcmdlIHNsb3cg Z3Jvd2luZyBsb2cgZmlsZXMgb24gYSBuZWFybHkgZnVsbApmaWxlc3lzdGVtIG1heSBjYXVzZSBw cmVtYXR1cmUgRU5PU1BDLiBIZW5jZSBhcyB0aGUgZmlsZXN5c3RlbSBuZWFycwpmdWxsLCB0aGUg bWF4aW11bSBkeW5hbWljIHByZWFsbG9jIHNpemUg0ZZzIHJlZHVjZWQgYWNjb3JkaW5nIHRvIHRo aXMKdGFibGUgKGJhc2VkIG9uIDRrIGJsb2NrIHNpemUpOgoKZnJlZXNwYWNlICAgICAgIG1heCBw cmVhbGxvYyBzaXplCiAgPjUlICAgICAgICAgICAgIGZ1bGwgZXh0ZW50ICg4R0IpCiAgNC01JSAg ICAgICAgICAgICAyR0IgKDhHQiA+PiAyKQogIDMtNCUgICAgICAgICAgICAgMUdCICg4R0IgPj4g MykKICAyLTMlICAgICAgICAgICA1MTJNQiAoOEdCID4+IDQpCiAgMS0yJSAgICAgICAgICAgMjU2 TUIgKDhHQiA+PiA1KQogIDwxJSAgICAgICAgICAgIDEyOE1CICg4R0IgPj4gNikKClRoaXMgc2hv dWxkIHJlZHVjZSB0aGUgYW1vdW50IG9mIHNwYWNlIGhlbGQgaW4gc3BlY3VsYXRpdmUKcHJlYWxs b2NhdGlvbiBmb3Igc3VjaCBjYXNlcy4KClRoZSBhbGxvY3NpemUgbW91bnQgb3B0aW9uIHR1cm5z IG9mZiB0aGUgZHluYW1pYyBiZWhhdmlvdXIgYW5kIGZpeGVzCnRoZSBwcmVhbGxvYyBzaXplIHRv IHdoYXRldmVyIHRoZSBtb3VudCBvcHRpb24gc3BlY2lmaWVzLiBpLmUuIHRoZQpiZWhhdmlvdXIg aXMgdW5jaGFuZ2VkLgoKU2lnbmVkLW9mZi1ieTogRGF2ZSBDaGlubmVyIDxkY2hpbm5lckByZWRo YXQuY29tPgotLS0KIGZzL3hmcy94ZnNfZnNvcHMuYyB8ICAgIDEgKwogZnMveGZzL3hmc19pb21h cC5jIHwgICA4NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0KIGZzL3hmcy94ZnNfbW91bnQuYyB8ICAgMjEgKysrKysrKysrKysrKwogZnMveGZzL3hm c19tb3VudC5oIHwgICAxNCArKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxMTEgaW5zZXJ0aW9u cygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc29wcy5jIGIv ZnMveGZzL3hmc19mc29wcy5jCmluZGV4IGJlMzRmZjIuLjZkMTcyMDYgMTAwNjQ0Ci0tLSBhL2Zz L3hmcy94ZnNfZnNvcHMuYworKysgYi9mcy94ZnMveGZzX2Zzb3BzLmMKQEAgLTM3NCw2ICszNzQs NyBAQCB4ZnNfZ3Jvd2ZzX2RhdGFfcHJpdmF0ZSgKIAkJbXAtPm1fbWF4aWNvdW50ID0gaWNvdW50 IDw8IG1wLT5tX3NiLnNiX2lub3BibG9nOwogCX0gZWxzZQogCQltcC0+bV9tYXhpY291bnQgPSAw OworCXhmc19zZXRfbG93X3NwYWNlX3RocmVzaG9sZHMobXApOwogCiAJLyogdXBkYXRlIHNlY29u ZGFyeSBzdXBlcmJsb2Nrcy4gKi8KIAlmb3IgKGFnbm8gPSAxOyBhZ25vIDwgbmFnY291bnQ7IGFn bm8rKykgewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hmc19pb21h cC5jCmluZGV4IDIwNTc2MTQuLjQwZjk2MTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAu YworKysgYi9mcy94ZnMveGZzX2lvbWFwLmMKQEAgLTM4OSw2ICszODksOSBAQCBlcnJvcl9vdXQ6 CiAgKiBJZiB0aGUgY2FsbGVyIGlzIGRvaW5nIGEgd3JpdGUgYXQgdGhlIGVuZCBvZiB0aGUgZmls ZSwgdGhlbiBleHRlbmQgdGhlCiAgKiBhbGxvY2F0aW9uIG91dCB0byB0aGUgZmlsZSBzeXN0ZW0n cyB3cml0ZSBpb3NpemUuICBXZSBjbGVhbiB1cCBhbnkgZXh0cmEKICAqIHNwYWNlIGxlZnQgb3Zl ciB3aGVuIHRoZSBmaWxlIGlzIGNsb3NlZCBpbiB4ZnNfaW5hY3RpdmUoKS4KKyAqCisgKiBJZiB3 ZSBmaW5kIHdlIGFscmVhZHkgaGF2ZSBkZWxhbGxvYyBwcmVhbGxvY2F0aW9uIGJleW9uZCBFT0Ys IGRvbid0IGRvIG1vcmUKKyAqIHByZWFsbG9jYXRpb24gYXMgaXQgaXQgbm90IG5lZWRlZC4KICAq LwogU1RBVElDIGludAogeGZzX2lvbWFwX2VvZl93YW50X3ByZWFsbG9jYXRlKApAQCAtNDA1LDYg KzQwOCw3IEBAIHhmc19pb21hcF9lb2Zfd2FudF9wcmVhbGxvY2F0ZSgKIAl4ZnNfZmlsYmxrc190 ICAgY291bnRfZnNiOwogCXhmc19mc2Jsb2NrX3QJZmlyc3RibG9jazsKIAlpbnQJCW4sIGVycm9y LCBpbWFwczsKKwlpbnQJCWZvdW5kX2RlbGFsbG9jID0gMDsKIAogCSpwcmVhbGxvYyA9IDA7CiAJ aWYgKChvZmZzZXQgKyBjb3VudCkgPD0gaXAtPmlfc2l6ZSkKQEAgLTQyNywxNCArNDMxLDYzIEBA IHhmc19pb21hcF9lb2Zfd2FudF9wcmVhbGxvY2F0ZSgKIAkJCWlmICgoaW1hcFtuXS5icl9zdGFy dGJsb2NrICE9IEhPTEVTVEFSVEJMT0NLKSAmJgogCQkJICAgIChpbWFwW25dLmJyX3N0YXJ0Ymxv Y2sgIT0gREVMQVlTVEFSVEJMT0NLKSkKIAkJCQlyZXR1cm4gMDsKKwogCQkJc3RhcnRfZnNiICs9 IGltYXBbbl0uYnJfYmxvY2tjb3VudDsKIAkJCWNvdW50X2ZzYiAtPSBpbWFwW25dLmJyX2Jsb2Nr Y291bnQ7CisKKwkJCWlmIChpbWFwW25dLmJyX3N0YXJ0YmxvY2sgPT0gREVMQVlTVEFSVEJMT0NL KQorCQkJCWZvdW5kX2RlbGFsbG9jID0gMTsKIAkJfQogCX0KLQkqcHJlYWxsb2MgPSAxOworCWlm ICghZm91bmRfZGVsYWxsb2MpCisJCSpwcmVhbGxvYyA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKKy8q CisgKiBJZiB3ZSBkb24ndCBoYXZlIGEgdXNlciBzcGVjaWZpZWQgcHJlYWxsb2NhdGlvbiBzaXpl LCBkeW5hbWljYWxseSBpbmNyZWFzZQorICogdGhlIHByZWFsbG9jYXRpb24gc2l6ZSBhcyB0aGUg c2l6ZSBvZiB0aGUgZmlsZSBncm93cy4gQ2FwIHRoZSBtYXhpbXVtIHNpemUKKyAqIGF0IGEgc2lu Z2xlIGV4dGVudCBvciBsZXNzIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG5lYXIgZnVsbC4gVGhlIGNs b3NlciB0aGUKKyAqIGZpbGVzeXN0ZW0gaXMgdG8gZnVsbCwgdGhlIHNtYWxsZXIgdGhlIG1heGlt dW0gcHJlYWxvY2F0aW9uLgorICovCitTVEFUSUMgeGZzX2ZzYmxvY2tfdAoreGZzX2lvbWFwX3By ZWFsbG9jX3NpemUoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19pbm9kZQkq aXApCit7CisJeGZzX2ZzYmxvY2tfdAkJYWxsb2NfYmxvY2tzID0gMDsKKworCWlmICghKG1wLT5t X2ZsYWdzICYgWEZTX01PVU5UX0RGTFRfSU9TSVpFKSkgeworCQlpbnQgc2hpZnQgPSAwOworCQlp bnQ2NF90IGZyZWVzcDsKKworCQlhbGxvY19ibG9ja3MgPSBYRlNfQl9UT19GU0IobXAsIGlwLT5p X3NpemUpOworCQlhbGxvY19ibG9ja3MgPSBYRlNfRklMRU9GRl9NSU4oTUFYRVhUTEVOLAorCQkJ CQlyb3VuZGRvd25fcG93X29mX3R3byhhbGxvY19ibG9ja3MpKTsKKworCQlmcmVlc3AgPSBwZXJj cHVfY291bnRlcl9yZWFkX3Bvc2l0aXZlKAorCQkJCQkJJm1wLT5tX2ljc2JbWEZTX0lDU0JfRkRC TE9DS1NdKTsKKwkJaWYgKGZyZWVzcCA8IG1wLT5tX2xvd19zcGFjZVtYRlNfTE9XU1BfNV9QQ05U XSkgeworCQkJc2hpZnQgPSAyOworCQkJaWYgKGZyZWVzcCA8IG1wLT5tX2xvd19zcGFjZVtYRlNf TE9XU1BfNF9QQ05UXSkKKwkJCQlzaGlmdCsrOworCQkJaWYgKGZyZWVzcCA8IG1wLT5tX2xvd19z cGFjZVtYRlNfTE9XU1BfM19QQ05UXSkKKwkJCQlzaGlmdCsrOworCQkJaWYgKGZyZWVzcCA8IG1w LT5tX2xvd19zcGFjZVtYRlNfTE9XU1BfMl9QQ05UXSkKKwkJCQlzaGlmdCsrOworCQkJaWYgKGZy ZWVzcCA8IG1wLT5tX2xvd19zcGFjZVtYRlNfTE9XU1BfMV9QQ05UXSkKKwkJCQlzaGlmdCsrOwor CQl9CisJCWlmIChzaGlmdCkKKwkJCWFsbG9jX2Jsb2NrcyA+Pj0gc2hpZnQ7CisJfQorCisJaWYg KGFsbG9jX2Jsb2NrcyA8IG1wLT5tX3dyaXRlaW9fYmxvY2tzKQorCQlhbGxvY19ibG9ja3MgPSBt cC0+bV93cml0ZWlvX2Jsb2NrczsKKworCXJldHVybiBhbGxvY19ibG9ja3M7Cit9CisKIFNUQVRJ QyBpbnQKIHhmc19pb21hcF93cml0ZV9kZWxheSgKIAl4ZnNfaW5vZGVfdAkqaXAsCkBAIC00Njks NiArNTIyLDcgQEAgeGZzX2lvbWFwX3dyaXRlX2RlbGF5KAogCWV4dHN6ID0geGZzX2dldF9leHRz el9oaW50KGlwKTsKIAlvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgb2Zmc2V0KTsKIAor CiAJZXJyb3IgPSB4ZnNfaW9tYXBfZW9mX3dhbnRfcHJlYWxsb2NhdGUobXAsIGlwLCBvZmZzZXQs IGNvdW50LAogCQkJCWlvZmxhZywgaW1hcCwgWEZTX1dSSVRFX0lNQVBTLCAmcHJlYWxsb2MpOwog CWlmIChlcnJvcikKQEAgLTQ3Niw5ICs1MzAsMTEgQEAgeGZzX2lvbWFwX3dyaXRlX2RlbGF5KAog CiByZXRyeToKIAlpZiAocHJlYWxsb2MpIHsKKwkJeGZzX2ZzYmxvY2tfdAlhbGxvY19ibG9ja3Mg PSB4ZnNfaW9tYXBfcHJlYWxsb2Nfc2l6ZShtcCwgaXApOworCiAJCWFsaWduZWRfb2Zmc2V0ID0g WEZTX1dSSVRFSU9fQUxJR04obXAsIChvZmZzZXQgKyBjb3VudCAtIDEpKTsKIAkJaW9hbGlnbiA9 IFhGU19CX1RPX0ZTQlQobXAsIGFsaWduZWRfb2Zmc2V0KTsKLQkJbGFzdF9mc2IgPSBpb2FsaWdu ICsgbXAtPm1fd3JpdGVpb19ibG9ja3M7CisJCWxhc3RfZnNiID0gaW9hbGlnbiArIGFsbG9jX2Js b2NrczsKIAl9IGVsc2UgewogCQlsYXN0X2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgKCh4ZnNfdWZz aXplX3QpKG9mZnNldCArIGNvdW50KSkpOwogCX0KQEAgLTQ5NiwyMiArNTUyLDMxIEBAIHJldHJ5 OgogCQkJICBYRlNfQk1BUElfREVMQVkgfCBYRlNfQk1BUElfV1JJVEUgfAogCQkJICBYRlNfQk1B UElfRU5USVJFLCAmZmlyc3RibG9jaywgMSwgaW1hcCwKIAkJCSAgJm5pbWFwcywgTlVMTCk7Ci0J aWYgKGVycm9yICYmIChlcnJvciAhPSBFTk9TUEMpKQorCXN3aXRjaCAoZXJyb3IpIHsKKwljYXNl IDA6CisJY2FzZSBFTk9TUEM6CisJY2FzZSBFRFFVT1Q6CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJ CXJldHVybiBYRlNfRVJST1IoZXJyb3IpOworCX0KIAogCS8qCi0JICogSWYgYm1hcGkgcmV0dXJu ZWQgdXMgbm90aGluZywgYW5kIGlmIHdlIGRpZG4ndCBnZXQgYmFjayBFRFFVT1QsCi0JICogdGhl biB3ZSBtdXN0IGhhdmUgcnVuIG91dCBvZiBzcGFjZSAtIGZsdXNoIGFsbCBvdGhlciBpbm9kZXMg d2l0aAotCSAqIGRlbGFsbG9jIGJsb2NrcyBhbmQgcmV0cnkgd2l0aG91dCBFT0YgcHJlYWxsb2Nh dGlvbi4KKwkgKiBJZiBibWFwaSByZXR1cm5lZCB1cyBub3RoaW5nLCB3ZSBnb3QgZWl0aGVyIEVO T1NQQyBvciBFRFFVT1QuICBGb3IKKwkgKiBFTk9TUEMsICogZmx1c2ggYWxsIG90aGVyIGlub2Rl cyB3aXRoIGRlbGFsbG9jIGJsb2NrcyB0byBmcmVlIHVwCisJICogc29tZSBvZiB0aGUgZXhjZXNz IHJlc2VydmVkIG1ldGFkYXRhIHNwYWNlLiBGb3IgYm90aCBjYXNlcywgcmV0cnkKKwkgKiB3aXRo b3V0IEVPRiBwcmVhbGxvY2F0aW9uLgogCSAqLwogCWlmIChuaW1hcHMgPT0gMCkgewogCQl0cmFj ZV94ZnNfZGVsYWxsb2NfZW5vc3BjKGlwLCBvZmZzZXQsIGNvdW50KTsKIAkJaWYgKGZsdXNoZWQp Ci0JCQlyZXR1cm4gWEZTX0VSUk9SKEVOT1NQQyk7CisJCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9y ID8gZXJyb3IgOiBFTk9TUEMpOwogCi0JCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7 Ci0JCXhmc19mbHVzaF9pbm9kZXMoaXApOwotCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENM KTsKKwkJaWYgKGVycm9yID09IEVOT1NQQykgeworCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9D S19FWENMKTsKKwkJCXhmc19mbHVzaF9pbm9kZXMoaXApOworCQkJeGZzX2lsb2NrKGlwLCBYRlNf SUxPQ0tfRVhDTCk7CisJCX0KIAogCQlmbHVzaGVkID0gMTsKIAkJZXJyb3IgPSAwOwpkaWZmIC0t Z2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IDVlNDFl ZjMuLmZlMjczMzggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMv eGZzX21vdW50LmMKQEAgLTExMDEsNiArMTEwMSwyNCBAQCB4ZnNfc2V0X3J3X3NpemVzKHhmc19t b3VudF90ICptcCkKIH0KIAogLyoKKyAqIHByZWNhbGN1bGF0ZSB0aGUgbG93IHNwYWNlIHRocmVz aG9sZHMgZm9yIGR5bmFtaWMgc3BlY3VsYXRpdmUgcHJlYWxsb2NhdGlvbi4KKyAqLwordm9pZAor eGZzX3NldF9sb3dfc3BhY2VfdGhyZXNob2xkcygKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCkKK3sK KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBYRlNfTE9XU1BfTUFYOyBpKyspIHsKKwkJX191 aW50NjRfdCBzcGFjZSA9IG1wLT5tX3NiLnNiX2RibG9ja3M7CisKKwkJZG9fZGl2KHNwYWNlLCAx MDApOworCQltcC0+bV9sb3dfc3BhY2VbaV0gPSBzcGFjZSAqIChpICsgMSk7CisJfQorfQorCisK Ky8qCiAgKiBTZXQgd2hldGhlciB3ZSdyZSB1c2luZyBpbm9kZSBhbGlnbm1lbnQuCiAgKi8KIFNU QVRJQyB2b2lkCkBAIC0xMzIyLDYgKzEzNDAsOSBAQCB4ZnNfbW91bnRmcygKIAkgKi8KIAl4ZnNf c2V0X3J3X3NpemVzKG1wKTsKIAorCS8qIHNldCB0aGUgbG93IHNwYWNlIHRocmVzaG9sZHMgZm9y IGR5bmFtaWMgcHJlYWxsb2NhdGlvbiAqLworCXhmc19zZXRfbG93X3NwYWNlX3RocmVzaG9sZHMo bXApOworCiAJLyoKIAkgKiBTZXQgdGhlIGlub2RlIGNsdXN0ZXIgc2l6ZS4KIAkgKiBUaGlzIG1h eSBzdGlsbCBiZSBvdmVycmlkZGVuIGJ5IHRoZSBmaWxlIHN5c3RlbQpkaWZmIC0tZ2l0IGEvZnMv eGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IDAzYWQyNWM2Li43YjQy ZTA0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21vdW50LmgKKysrIGIvZnMveGZzL3hmc19tb3Vu dC5oCkBAIC03NSw2ICs3NSwxNiBAQCBlbnVtIHsKIAlYRlNfSUNTQl9NQVgsCiB9OwogCisvKiBk eW5hbWljIHByZWFsbG9jYXRpb24gZnJlZSBzcGFjZSB0aHJlc2hvbGRzLCA1JSBkb3duIHRvIDEl ICovCitlbnVtIHsKKwlYRlNfTE9XU1BfMV9QQ05UID0gMCwKKwlYRlNfTE9XU1BfMl9QQ05ULAor CVhGU19MT1dTUF8zX1BDTlQsCisJWEZTX0xPV1NQXzRfUENOVCwKKwlYRlNfTE9XU1BfNV9QQ05U LAorCVhGU19MT1dTUF9NQVgsCit9OworCiB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQgewogCXN0 cnVjdCBzdXBlcl9ibG9jawkqbV9zdXBlcjsKIAl4ZnNfdGlkX3QJCW1fdGlkOwkJLyogbmV4dCB1 bnVzZWQgdGlkIGZvciBmcyAqLwpAQCAtMTY5LDYgKzE3OSw4IEBAIHR5cGVkZWYgc3RydWN0IHhm c19tb3VudCB7CiAJCQkJCQkgICBvbiB0aGUgbmV4dCByZW1vdW50LHJ3ICovCiAJc3RydWN0IHNo cmlua2VyCQltX2lub2RlX3NocmluazsJLyogaW5vZGUgcmVjbGFpbSBzaHJpbmtlciAqLwogCXN0 cnVjdCBwZXJjcHVfY291bnRlcgltX2ljc2JbWEZTX0lDU0JfTUFYXTsKKwlpbnQ2NF90CQkJbV9s b3dfc3BhY2VbWEZTX0xPV1NQX01BWF07CisJCQkJCQkvKiBsb3cgZnJlZSBzcGFjZSB0aHJlc2hv bGRzICovCiB9IHhmc19tb3VudF90OwogCiAvKgpAQCAtMzMzLDYgKzM0NSw4IEBAIGV4dGVybiB2 b2lkCXhmc19pY3NiX3N5bmNfY291bnRlcnMoc3RydWN0IHhmc19tb3VudCAqKTsKIGV4dGVybiBp bnQJeGZzX2ljc2JfbW9kaWZ5X2lub2RlcyhzdHJ1Y3QgeGZzX21vdW50ICosIGludCwgaW50NjRf dCk7CiBleHRlcm4gaW50CXhmc19pY3NiX21vZGlmeV9mcmVlX2Jsb2NrcyhzdHJ1Y3QgeGZzX21v dW50ICosIGludDY0X3QsIGludCk7CiAKK2V4dGVybiB2b2lkCXhmc19zZXRfbG93X3NwYWNlX3Ro cmVzaG9sZHMoc3RydWN0IHhmc19tb3VudCAqKTsKKwogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8K IAogZXh0ZXJuIHZvaWQJeGZzX21vZF9zYihzdHJ1Y3QgeGZzX3RyYW5zICosIF9faW50NjRfdCk7 Ci0tIAoxLjcuMi4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwp4ZnMgbWFpbGluZyBsaXN0Cnhmc0Bvc3Muc2dpLmNvbQpodHRwOi8vb3NzLnNnaS5jb20v bWFpbG1hbi9saXN0aW5mby94ZnMK