Date: Tue, 7 May 2019 00:50:10 +0000 From: Rick Macklem <rmacklem@uoguelph.ca> To: Peter Eriksson <pen@lysator.liu.se> Cc: "freebsd-fs@freebsd.org" <freebsd-fs@FreeBSD.org> Subject: patch to improve perf for handling exports of large numbers of file systems Message-ID: <YQBPR0101MB22608FE3367E1DBD64ED01E1DD310@YQBPR0101MB2260.CANPRD01.PROD.OUTLOOK.COM>
next in thread | raw e-mail | index | archive | help
--_002_YQBPR0101MB22608FE3367E1DBD64ED01E1DD310YQBPR0101MB2260_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi, Peter has reported to me via email that updating exports when mountd receiv= es a SIGHUP takes about 16seconds. This isn't surprising, since he has 20,000= + file systems to export. The current code deletes all 20,000+ exports in the kernel and then re-expo= rts everything in the exports file while having the nfsd suspended (assuming th= e "-S" option is being used). It was designed decades ago when a system only had a few file systems, but sometimes many exported directories within a file sys= tem. The attached patch is a first draft (minimally tested) for the addition of = a "-I" option for mountd. When mountd is started with this "-I" option, it processes the = exports file(s) into the structures that mountd uses and then compares the old and = new structures, only doing unexport/re-export for the ones that have changed, when it receives a SIGHUP. At the moment, the algorithm for doing the comparison isn't efficient, but = at least it isn't doing a lot of system calls to unexport/re-export. (A simple chang= e from using a single linked list to a hash table of linked lists for the "= struct exportlist" would help the comparison algorithm a lot, but I wanted to hold off on that until what I h= ave has seen more testing, since it will make the patch even more complex.) I hope that Peter can test this (and anyone else willing to do so, please d= o since there are many variants within the exports file(s) and I might not th= ink of them all to test). The patch is "noisy", since it puts a bunch of debug stuff out via syslog()= . You can get rid of this by simply deleting the syslog(..); lines that are n= ot indented. Anyone who can test this, it would be appreciated, rick ps: Without "-I", the behaviour should not have changed. --_002_YQBPR0101MB22608FE3367E1DBD64ED01E1DD310YQBPR0101MB2260_ Content-Type: application/octet-stream; name="mountd-exp.patch" Content-Description: mountd-exp.patch Content-Disposition: attachment; filename="mountd-exp.patch"; size=23798; creation-date="Tue, 07 May 2019 00:44:23 GMT"; modification-date="Tue, 07 May 2019 00:44:23 GMT" Content-Transfer-Encoding: base64 LS0tIHVzci5zYmluL21vdW50ZC9tb3VudGQuYy5zYXYJMjAxOS0wNC0zMCAyMTo0ODoyMy4xNTU0 MTkwMDAgLTA0MDAKKysrIHVzci5zYmluL21vdW50ZC9tb3VudGQuYwkyMDE5LTA1LTA2IDIwOjE2 OjAwLjk4MTY3NDAwMCAtMDQwMApAQCAtMTE0LDEwICsxMTQsMTMgQEAgc3RydWN0IGRpcmxpc3Qg ewogc3RydWN0IGV4cG9ydGxpc3QgewogCXN0cnVjdCBkaXJsaXN0CSpleF9kaXJsOwogCXN0cnVj dCBkaXJsaXN0CSpleF9kZWZkaXI7CisJc3RydWN0IGdyb3VwbGlzdCAqZXhfZ3JwaGVhZDsKIAlp bnQJCWV4X2ZsYWc7CiAJZnNpZF90CQlleF9mczsKIAljaGFyCQkqZXhfZnNkaXI7CiAJY2hhcgkJ KmV4X2luZGV4ZmlsZTsKKwlzdHJ1Y3QgeHVjcmVkCWV4X2RlZmFub247CisJaW50CQlleF9kZWZl eGZsYWdzOwogCWludAkJZXhfbnVtc2VjZmxhdm9yczsKIAlpbnQJCWV4X3NlY2ZsYXZvcnNbTUFY U0VDRkxBVk9SU107CiAJaW50CQlleF9kZWZudW1zZWNmbGF2b3JzOwpAQCAtMTI3LDYgKzEzMCw5 IEBAIHN0cnVjdCBleHBvcnRsaXN0IHsKIH07CiAvKiBleF9mbGFnIGJpdHMgKi8KICNkZWZpbmUJ RVhfTElOS0VECTB4MQorI2RlZmluZQlFWF9ET05FCQkweDIKKworU0xJU1RfSEVBRChleHBvcnRs aXN0aGVhZCwgZXhwb3J0bGlzdCk7CiAKIHN0cnVjdCBuZXRtc2sgewogCXN0cnVjdCBzb2NrYWRk cl9zdG9yYWdlIG50X25ldDsKQEAgLTE0Myw2ICsxNDksOSBAQCBzdHJ1Y3QgZ3JvdXBsaXN0IHsK IAlpbnQgZ3JfdHlwZTsKIAl1bmlvbiBncm91cHR5cGVzIGdyX3B0cjsKIAlzdHJ1Y3QgZ3JvdXBs aXN0ICpncl9uZXh0OworCXN0cnVjdCB4dWNyZWQgZ3JfYW5vbjsKKwlpbnQgZ3JfZXhmbGFnczsK KwlpbnQgZ3JfZmxhZzsKIAlpbnQgZ3JfbnVtc2VjZmxhdm9yczsKIAlpbnQgZ3Jfc2VjZmxhdm9y c1tNQVhTRUNGTEFWT1JTXTsKIH07CkBAIC0xNTMsNiArMTYyLDkgQEAgc3RydWN0IGdyb3VwbGlz dCB7CiAjZGVmaW5lCUdUX0RFRkFVTFQJMHgzCiAjZGVmaW5lIEdUX0lHTk9SRQkweDUKIAorLyog R3JvdXAgZmxhZ3MgKi8KKyNkZWZpbmUJR1JfRk5ECQkweDEKKwogc3RydWN0IGhvc3RsaXN0IHsK IAlpbnQJCSBodF9mbGFnOwkvKiBVc2VzIERQX3h4IGJpdHMgKi8KIAlzdHJ1Y3QgZ3JvdXBsaXN0 ICpodF9ncnA7CkBAIC0xODUsNiArMTk3LDcgQEAgc3RhdGljIHZvaWQJY29tcGxldGVfc2Vydmlj ZShzdHJ1Y3QgbmV0Ywogc3RhdGljIHZvaWQJY2xlYXJvdXRfc2VydmljZSh2b2lkKTsKIHN0YXRp YyB2b2lkCWRlbF9tbGlzdChjaGFyICpob3N0cCwgY2hhciAqZGlycCk7CiBzdGF0aWMgc3RydWN0 IGRpcmxpc3QJKmRpcnBfc2VhcmNoKHN0cnVjdCBkaXJsaXN0ICosIGNoYXIgKik7CitzdGF0aWMg aW50CWRvX2V4cG9ydF9tb3VudChzdHJ1Y3QgZXhwb3J0bGlzdCAqLCBzdHJ1Y3Qgc3RhdGZzICop Owogc3RhdGljIGludAlkb19tb3VudChzdHJ1Y3QgZXhwb3J0bGlzdCAqLCBzdHJ1Y3QgZ3JvdXBs aXN0ICosIGludCwKIAkJICAgIHN0cnVjdCB4dWNyZWQgKiwgY2hhciAqLCBpbnQsIHN0cnVjdCBz dGF0ZnMgKik7CiBzdGF0aWMgaW50CWRvX29wdChjaGFyICoqLCBjaGFyICoqLCBzdHJ1Y3QgZXhw b3J0bGlzdCAqLApAQCAtMTk1LDcgKzIwOCwxNiBAQCBzdGF0aWMgdm9pZAlmcmVlX2RpcihzdHJ1 Y3QgZGlybGlzdCAqKTsKIHN0YXRpYyB2b2lkCWZyZWVfZXhwKHN0cnVjdCBleHBvcnRsaXN0ICop Owogc3RhdGljIHZvaWQJZnJlZV9ncnAoc3RydWN0IGdyb3VwbGlzdCAqKTsKIHN0YXRpYyB2b2lk CWZyZWVfaG9zdChzdHJ1Y3QgaG9zdGxpc3QgKik7Ci1zdGF0aWMgdm9pZAlnZXRfZXhwb3J0bGlz dCh2b2lkKTsKK3N0YXRpYyB2b2lkCWZyZWVfdjRyb290ZXhwKHZvaWQpOworc3RhdGljIHZvaWQJ Z2V0X2V4cG9ydGxpc3Rfb25lKGludCk7CitzdGF0aWMgdm9pZAlnZXRfZXhwb3J0bGlzdChpbnQg cGFzc25vKTsKK3N0YXRpYyB2b2lkCXJlYWRfZXhwb3J0ZmlsZShpbnQgcGFzc25vKTsKK3N0YXRp YyB2b2lkCWZyZWVfZXhwb3J0cyhzdHJ1Y3QgZXhwb3J0bGlzdGhlYWQgKik7CitzdGF0aWMgaW50 CWNvbXBhcmVfbm1vdW50X2V4cG9ydGxpc3Qoc3RydWN0IGlvdmVjICosIGludCwgY2hhciAqKTsK K3N0YXRpYyBpbnQJY29tcGFyZV9leHBvcnQoc3RydWN0IGV4cG9ydGxpc3QgKiwgc3RydWN0IGV4 cG9ydGxpc3QgKik7CitzdGF0aWMgaW50CWNvbXBhcmVfY3JlZChzdHJ1Y3QgeHVjcmVkICosIHN0 cnVjdCB4dWNyZWQgKik7CitzdGF0aWMgaW50CWNvbXBhcmVfc2VjZmxhdm9yKGludCAqLCBpbnQg KiwgaW50KTsKK3N0YXRpYyB2b2lkCWRlbGV0ZV9leHBvcnQoc3RydWN0IGlvdmVjICosIGludCwg c3RydWN0IHN0YXRmcyAqLCBjaGFyICopOwogc3RhdGljIGludAlnZXRfaG9zdChjaGFyICosIHN0 cnVjdCBncm91cGxpc3QgKiwgc3RydWN0IGdyb3VwbGlzdCAqKTsKIHN0YXRpYyBzdHJ1Y3QgaG9z dGxpc3QgKmdldF9odCh2b2lkKTsKIHN0YXRpYyBpbnQJZ2V0X2xpbmUodm9pZCk7CkBAIC0yMDQs NyArMjI2LDcgQEAgc3RhdGljIGludAlnZXRfbmV0KGNoYXIgKiwgc3RydWN0IG5ldG1zawogc3Rh dGljIHZvaWQJZ2V0ZXhwX2VycihzdHJ1Y3QgZXhwb3J0bGlzdCAqLCBzdHJ1Y3QgZ3JvdXBsaXN0 ICosIGNvbnN0IGNoYXIgKik7CiBzdGF0aWMgc3RydWN0IGdyb3VwbGlzdAkqZ2V0X2dycCh2b2lk KTsKIHN0YXRpYyB2b2lkCWhhbmdfZGlycChzdHJ1Y3QgZGlybGlzdCAqLCBzdHJ1Y3QgZ3JvdXBs aXN0ICosCi0JCQkJc3RydWN0IGV4cG9ydGxpc3QgKiwgaW50KTsKKwkJICAgIHN0cnVjdCBleHBv cnRsaXN0ICosIGludCwgc3RydWN0IHh1Y3JlZCAqLCBpbnQpOwogc3RhdGljIHZvaWQJaHVwaGFu ZGxlcihpbnQgc2lnKTsKIHN0YXRpYyBpbnQJbWFrZW1hc2soc3RydWN0IHNvY2thZGRyX3N0b3Jh Z2UgKnNzcCwgaW50IGJpdGxlbik7CiBzdGF0aWMgdm9pZAltbnRzcnYoc3RydWN0IHN2Y19yZXEg KiwgU1ZDWFBSVCAqKTsKQEAgLTIyNyw5ICsyNDksOSBAQCBzdGF0aWMgaW50CXhkcl9maHMoWERS ICosIGNhZGRyX3QpOwogc3RhdGljIGludAl4ZHJfbWxpc3QoWERSICosIGNhZGRyX3QpOwogc3Rh dGljIHZvaWQJdGVybWluYXRlKGludCk7CiAKLXN0YXRpYyBTTElTVF9IRUFEKCwgZXhwb3J0bGlz dCkgZXhwaGVhZCA9IFNMSVNUX0hFQURfSU5JVElBTElaRVIoZXhwaGVhZCk7Ci1zdGF0aWMgU0xJ U1RfSEVBRCgsIG1vdW50bGlzdCkgbWxoZWFkID0gU0xJU1RfSEVBRF9JTklUSUFMSVpFUihtbGhl YWQpOwotc3RhdGljIHN0cnVjdCBncm91cGxpc3QgKmdycGhlYWQ7CitzdGF0aWMgc3RydWN0IGV4 cG9ydGxpc3RoZWFkIGV4cGhlYWQgPSBTTElTVF9IRUFEX0lOSVRJQUxJWkVSKCZleHBoZWFkKTsK K3N0YXRpYyBzdHJ1Y3QgZXhwb3J0bGlzdGhlYWQgb2xkZXhwaGVhZDsKK3N0YXRpYyBTTElTVF9I RUFEKCwgbW91bnRsaXN0KSBtbGhlYWQgPSBTTElTVF9IRUFEX0lOSVRJQUxJWkVSKCZtbGhlYWQp Owogc3RhdGljIGNoYXIgKmV4bmFtZXNfZGVmYXVsdFsyXSA9IHsgX1BBVEhfRVhQT1JUUywgTlVM TCB9Owogc3RhdGljIGNoYXIgKipleG5hbWVzOwogc3RhdGljIGNoYXIgKipob3N0cyA9IE5VTEw7 CkBAIC0yNjAsNiArMjgyLDggQEAgc3RhdGljIGludCBoYXZlX3Y2ID0gMTsKIAogc3RhdGljIGlu dCB2NHJvb3RfcGhhc2UgPSAwOwogc3RhdGljIGNoYXIgdjRyb290X2RpcnBhdGhbUEFUSF9NQVgg KyAxXTsKK3N0YXRpYyBzdHJ1Y3QgZXhwb3J0bGlzdCAqdjRyb290X2VwID0gTlVMTDsKK3N0YXRp YyBzdHJ1Y3QgZ3JvdXBsaXN0ICp2NHJvb3RfZ3JwID0gTlVMTDsKIHN0YXRpYyBpbnQgaGFzX3B1 YmxpY2ZoID0gMDsKIAogc3RhdGljIHN0cnVjdCBwaWRmaCAqcGZoID0gTlVMTDsKQEAgLTM2OCw5 ICszOTIsMTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaW5fcG9ydF90IHN2Y3Bv cnQ7CiAJaW50IGMsIGssIHM7CiAJaW50IG1heHJlYyA9IFJQQ19NQVhEQVRBU0laRTsKLQlpbnQg YXR0ZW1wdF9jbnQsIHBvcnRfbGVuLCBwb3J0X3BvcywgcmV0OworCWludCBhdHRlbXB0X2NudCwg cGFzc25vLCBwb3J0X2xlbiwgcG9ydF9wb3MsIHJldDsKIAljaGFyICoqcG9ydF9saXN0OwogCisJ cGFzc25vID0gMDsKIAkvKiBDaGVjayB0aGF0IGFub3RoZXIgbW91bnRkIGlzbid0IGFscmVhZHkg cnVubmluZy4gKi8KIAlwZmggPSBwaWRmaWxlX29wZW4oX1BBVEhfTU9VTlREUElELCAwNjAwLCAm b3RoZXJwaWQpOwogCWlmIChwZmggPT0gTlVMTCkgewpAQCAtMzg1LDcgKzQxMCw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWVsc2UKIAkJY2xvc2Uocyk7CiAKLQl3aGlsZSAoKGMg PSBnZXRvcHQoYXJnYywgYXJndiwgIjJkZWg6bG5wOnJTIikpICE9IC0xKQorCXdoaWxlICgoYyA9 IGdldG9wdChhcmdjLCBhcmd2LCAiMmRlaDpJbG5wOnJTIikpICE9IC0xKQogCQlzd2l0Y2ggKGMp IHsKIAkJY2FzZSAnMic6CiAJCQlmb3JjZV92MiA9IDE7CkBAIC00MzcsNiArNDYyLDkgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWNhc2UgJ1MnOgogCQkJc3VzcGVuZF9uZnNkID0g MTsKIAkJCWJyZWFrOworCQljYXNlICdJJzoKKwkJCXBhc3NubyA9IDE7CisJCQlicmVhazsKIAkJ ZGVmYXVsdDoKIAkJCXVzYWdlKCk7CiAJCX0KQEAgLTQ0OSw3ICs0NzcsNiBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAogCWFyZ2MgLT0gb3B0aW5kOwogCWFyZ3YgKz0gb3B0aW5kOwot CWdycGhlYWQgPSAoc3RydWN0IGdyb3VwbGlzdCAqKU5VTEw7CiAJaWYgKGFyZ2MgPiAwKQogCQll eG5hbWVzID0gYXJndjsKIAllbHNlCkBAIC00NTcsNyArNDg0LDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJb3BlbmxvZygibW91bnRkIiwgTE9HX1BJRCwgTE9HX0RBRU1PTik7CiAJ aWYgKGRlYnVnKQogCQl3YXJueCgiZ2V0dGluZyBleHBvcnQgbGlzdCIpOwotCWdldF9leHBvcnRs aXN0KCk7CisJZ2V0X2V4cG9ydGxpc3QoMCk7CiAJaWYgKGRlYnVnKQogCQl3YXJueCgiZ2V0dGlu ZyBtb3VudCBsaXN0Iik7CiAJZ2V0X21vdW50bGlzdCgpOwpAQCAtNjI4LDcgKzY1NSw3IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCS8qIEV4cGFuZCBzdmNfcnVuKCkgaGVyZSBzbyB0 aGF0IHdlIGNhbiBjYWxsIGdldF9leHBvcnRsaXN0KCkuICovCiAJZm9yICg7OykgewogCQlpZiAo Z290X3NpZ2h1cCkgewotCQkJZ2V0X2V4cG9ydGxpc3QoKTsKKwkJCWdldF9leHBvcnRsaXN0KHBh c3Nubyk7CiAJCQlnb3Rfc2lnaHVwID0gMDsKIAkJfQogCQlyZWFkZmRzID0gc3ZjX2Zkc2V0OwpA QCAtMTQxNiw3ICsxNDQzLDcgQEAgc3RhdGljIEZJTEUgKmV4cF9maWxlOwogICogR2V0IHRoZSBl eHBvcnQgbGlzdCBmcm9tIG9uZSwgY3VycmVudGx5IG9wZW4gZmlsZQogICovCiBzdGF0aWMgdm9p ZAotZ2V0X2V4cG9ydGxpc3Rfb25lKHZvaWQpCitnZXRfZXhwb3J0bGlzdF9vbmUoaW50IHBhc3Nu bykKIHsKIAlzdHJ1Y3QgZXhwb3J0bGlzdCAqZXA7CiAJc3RydWN0IGdyb3VwbGlzdCAqZ3JwLCAq dGdycDsKQEAgLTE2NTMsMTEgKzE2ODAsMTUgQEAgZ2V0X2V4cG9ydGxpc3Rfb25lKHZvaWQpCiAJ CSAqIExvb3AgdGhyb3VnaCBob3N0cywgcHVzaGluZyB0aGUgZXhwb3J0cyBpbnRvIHRoZSBrZXJu ZWwuCiAJCSAqIEFmdGVyIGxvb3AsIHRncnAgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgbGlz dCBhbmQKIAkJICogZ3JwIHBvaW50cyB0byB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgbGlzdC4KKwkJ ICogRG8gbm90IGRvIHRoZSBkb19tb3VudCgpIGZvciBwYXNzbm8gPT0gMSwgc2luY2UgdGhlCisJ CSAqIHNlY29uZCBwYXNzIHdpbGwgZG8gaXQsIGFzIHJlcXVpcmVkLgogCQkgKi8KIAkJZ3JwID0g dGdycDsKIAkJZG8gewotCQkJaWYgKGRvX21vdW50KGVwLCBncnAsIGV4ZmxhZ3MsICZhbm9uLCBk aXJwLCBkaXJwbGVuLAotCQkJICAgICZmc2IpKSB7CisJCQlncnAtPmdyX2V4ZmxhZ3MgPSBleGZs YWdzOworCQkJZ3JwLT5ncl9hbm9uID0gYW5vbjsKKwkJCWlmIChwYXNzbm8gIT0gMSAmJiBkb19t b3VudChlcCwgZ3JwLCBleGZsYWdzLCAmYW5vbiwKKwkJCSAgICBkaXJwLCBkaXJwbGVuLCAmZnNi KSkgewogCQkJCWdldGV4cF9lcnIoZXAsIHRncnAsIE5VTEwpOwogCQkJCWdvdG8gbmV4dGxpbmU7 CiAJCQl9CkBAIC0xNjY4LDE1ICsxNjk5LDI2IEBAIGdldF9leHBvcnRsaXN0X29uZSh2b2lkKQog CQkgKi8KIAkJaWYgKHY0cm9vdF9waGFzZSA+IDAgJiYgdjRyb290X3BoYXNlIDw9IDIpIHsKIAkJ CS8qCi0JCQkgKiBTaW5jZSB0aGVzZSBzdHJ1Y3R1cmVzIGFyZW4ndCB1c2VkIGJ5IG1vdW50ZCwK KwkJCSAqIFRoZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgZm9yIHRoZSAiLUkiIHJlbG9hZCwKKwkJ CSAqIHNvIHNhdmUgdGhlbSBmb3IgdGhhdCBjYXNlLiAgT3RoZXJ3aXNlLCBqdXN0CiAJCQkgKiBm cmVlIHRoZW0gdXAgbm93LgogCQkJICovCi0JCQlpZiAoZXAgIT0gTlVMTCkKLQkJCQlmcmVlX2V4 cChlcCk7Ci0JCQl3aGlsZSAodGdycCAhPSBOVUxMKSB7Ci0JCQkJZ3JwID0gdGdycDsKLQkJCQl0 Z3JwID0gdGdycC0+Z3JfbmV4dDsKLQkJCQlmcmVlX2dycChncnApOworCQkJaWYgKHBhc3NubyA9 PSAxKSB7CisJCQkJaWYgKHY0cm9vdF9lcCAhPSBOVUxMKSB7CisJCQkJCWdldGV4cF9lcnIoZXAs IHRncnAsCisJCQkJCSAgICAibXVsdGlwbGUgVjQgbGluZXMiKTsKKwkJCQkJZ290byBuZXh0bGlu ZTsKKwkJCQl9CisJCQkJdjRyb290X2VwID0gZXA7CisJCQkJdjRyb290X2dycCA9IHRncnA7CisJ CQl9IGVsc2UgeworCQkJCWlmIChlcCAhPSBOVUxMKQorCQkJCQlmcmVlX2V4cChlcCk7CisJCQkJ d2hpbGUgKHRncnAgIT0gTlVMTCkgeworCQkJCQlncnAgPSB0Z3JwOworCQkJCQl0Z3JwID0gdGdy cC0+Z3JfbmV4dDsKKwkJCQkJZnJlZV9ncnAoZ3JwKTsKKwkJCQl9CiAJCQl9CiAJCQlnb3RvIG5l eHRsaW5lOwogCQl9CkBAIC0xNjg1LDEyICsxNzI3LDEyIEBAIGdldF9leHBvcnRsaXN0X29uZSh2 b2lkKQogCQkgKiBTdWNjZXNzLiBVcGRhdGUgdGhlIGRhdGEgc3RydWN0dXJlcy4KIAkJICovCiAJ CWlmIChoYXNfaG9zdCkgewotCQkJaGFuZ19kaXJwKGRpcmhlYWQsIHRncnAsIGVwLCBvcHRfZmxh Z3MpOwotCQkJZ3JwLT5ncl9uZXh0ID0gZ3JwaGVhZDsKLQkJCWdycGhlYWQgPSB0Z3JwOworCQkJ aGFuZ19kaXJwKGRpcmhlYWQsIHRncnAsIGVwLCBvcHRfZmxhZ3MsICZhbm9uLCBleGZsYWdzKTsK KwkJCWdycC0+Z3JfbmV4dCA9IGVwLT5leF9ncnBoZWFkOworCQkJZXAtPmV4X2dycGhlYWQgPSB0 Z3JwOwogCQl9IGVsc2UgewogCQkJaGFuZ19kaXJwKGRpcmhlYWQsIChzdHJ1Y3QgZ3JvdXBsaXN0 ICopTlVMTCwgZXAsCi0JCQkJb3B0X2ZsYWdzKTsKKwkJCQlvcHRfZmxhZ3MsICZhbm9uLCBleGZs YWdzKTsKIAkJCWZyZWVfZ3JwKGdycCk7CiAJCX0KIAkJZGlyaGVhZCA9IChzdHJ1Y3QgZGlybGlz dCAqKU5VTEw7CkBAIC0xNzEyLDQ1ICsxNzU0LDQzIEBAIG5leHRsaW5lOgogICogR2V0IHRoZSBl eHBvcnQgbGlzdCBmcm9tIGFsbCBzcGVjaWZpZWQgZmlsZXMKICAqLwogc3RhdGljIHZvaWQKLWdl dF9leHBvcnRsaXN0KHZvaWQpCitnZXRfZXhwb3J0bGlzdChpbnQgcGFzc25vKQogewotCXN0cnVj dCBleHBvcnRsaXN0ICplcCwgKmVwMjsKLQlzdHJ1Y3QgZ3JvdXBsaXN0ICpncnAsICp0Z3JwOwog CXN0cnVjdCBleHBvcnRfYXJncyBleHBvcnQ7CiAJc3RydWN0IGlvdmVjICppb3Y7CiAJc3RydWN0 IHN0YXRmcyAqZnNwLCAqbW50YnVmcDsKLQlzdHJ1Y3QgeHZmc2NvbmYgdmZjOwogCWNoYXIgZXJy bXNnWzI1NV07CiAJaW50IG51bSwgaTsKIAlpbnQgaW92bGVuOwotCWludCBkb25lOwogCXN0cnVj dCBuZnNleF9hcmdzIGVhcmdzOwogCi0JaWYgKHN1c3BlbmRfbmZzZCAhPSAwKQotCQkodm9pZClu ZnNzdmMoTkZTU1ZDX1NVU1BFTkRORlNELCBOVUxMKTsKK3N5c2xvZyhMT0dfRVJSLCAicGFzc25v PSVkIiwgcGFzc25vKTsKIAl2NHJvb3RfZGlycGF0aFswXSA9ICdcMCc7CisJZnJlZV92NHJvb3Rl eHAoKTsKKwlpZiAocGFzc25vID09IDEpIHsKKwkJLyoKKwkJICogU2F2ZSB0aGUgY3VycmVudCBs aXN0cyBhcyBvbGQgb25lcywgc28gdGhhdCB0aGUgbmV3IGxpc3RzCisJCSAqIGNhbiBiZSBjb21w YXJlZCB3aXRoIHRoZSBvbGQgb25lcyBpbiB0aGUgMm5kIHBhc3MuCisJCSAqLworCQlTTElTVF9G SVJTVCgmb2xkZXhwaGVhZCkgPSBTTElTVF9GSVJTVCgmZXhwaGVhZCk7CisJCVNMSVNUX0lOSVQo JmV4cGhlYWQpOworCisJCS8qIFJlYWQgdGhlIGV4cG9ydCBmaWxlKHMpIGFuZCBwcm9jZXNzIHRo ZW0gKi8KKwkJcmVhZF9leHBvcnRmaWxlKHBhc3Nubyk7CitzeXNsb2coTE9HX0VSUiwgInJlYWRl eHAxIik7CisJfSBlbHNlIHsKKwkJLyogSnVzdCBtYWtlIHRoZSBvbGQgbGlzdHMgZW1wdHkuICov CisJCVNMSVNUX0lOSVQoJm9sZGV4cGhlYWQpOworCX0KKwogCWJ6ZXJvKCZleHBvcnQsIHNpemVv ZihleHBvcnQpKTsKIAlleHBvcnQuZXhfZmxhZ3MgPSBNTlRfREVMRVhQT1JUOwogCWlvdiA9IE5V TEw7CiAJaW92bGVuID0gMDsKIAliemVybyhlcnJtc2csIHNpemVvZihlcnJtc2cpKTsKIAotCS8q Ci0JICogRmlyc3QsIGdldCByaWQgb2YgdGhlIG9sZCBsaXN0Ci0JICovCi0JU0xJU1RfRk9SRUFD SF9TQUZFKGVwLCAmZXhwaGVhZCwgZW50cmllcywgZXAyKSB7Ci0JCVNMSVNUX1JFTU9WRSgmZXhw aGVhZCwgZXAsIGV4cG9ydGxpc3QsIGVudHJpZXMpOwotCQlmcmVlX2V4cChlcCk7Ci0JfQotCi0J Z3JwID0gZ3JwaGVhZDsKLQl3aGlsZSAoZ3JwKSB7Ci0JCXRncnAgPSBncnA7Ci0JCWdycCA9IGdy cC0+Z3JfbmV4dDsKLQkJZnJlZV9ncnAodGdycCk7Ci0JfQotCWdycGhlYWQgPSAoc3RydWN0IGdy b3VwbGlzdCAqKU5VTEw7Ci0KKwlpZiAoc3VzcGVuZF9uZnNkICE9IDApCisJCSh2b2lkKW5mc3N2 YyhORlNTVkNfU1VTUEVORE5GU0QsIE5VTEwpOwogCS8qCiAJICogYW5kIHRoZSBvbGQgVjQgcm9v dCBkaXIuCiAJICovCkBAIC0xNzY1LDYyICsxODA1LDUyIEBAIGdldF9leHBvcnRsaXN0KHZvaWQp CiAJICovCiAJaGFzX3B1YmxpY2ZoID0gMDsKIAorCWJ1aWxkX2lvdmVjKCZpb3YsICZpb3ZsZW4s ICJmc3R5cGUiLCBOVUxMLCAwKTsKKwlidWlsZF9pb3ZlYygmaW92LCAmaW92bGVuLCAiZnNwYXRo IiwgTlVMTCwgMCk7CisJYnVpbGRfaW92ZWMoJmlvdiwgJmlvdmxlbiwgImZyb20iLCBOVUxMLCAw KTsKKwlidWlsZF9pb3ZlYygmaW92LCAmaW92bGVuLCAidXBkYXRlIiwgTlVMTCwgMCk7CisJYnVp bGRfaW92ZWMoJmlvdiwgJmlvdmxlbiwgImV4cG9ydCIsICZleHBvcnQsCisJICAgIHNpemVvZihl eHBvcnQpKTsKKwlidWlsZF9pb3ZlYygmaW92LCAmaW92bGVuLCAiZXJybXNnIiwgZXJybXNnLAor CSAgICBzaXplb2YoZXJybXNnKSk7CisKIAkvKgotCSAqIEFuZCBkZWxldGUgZXhwb3J0cyB0aGF0 IGFyZSBpbiB0aGUga2VybmVsIGZvciBhbGwgbG9jYWwKLQkgKiBmaWxlc3lzdGVtcy4KLQkgKiBY WFg6IFNob3VsZCBrbm93IGhvdyB0byBoYW5kbGUgYWxsIGxvY2FsIGV4cG9ydGFibGUgZmlsZXN5 c3RlbXMuCisJICogRm9yIHBhc3NubyA9PSAxLCBjb21wYXJlIHRoZSBvbGQgYW5kIG5ldyBsaXN0 cyB1cGRhdGluZyB0aGUga2VybmVsCisJICogZXhwb3J0cyBmb3IgYW55IGNhc2VzIHRoYXQgaGF2 ZSBjaGFuZ2VkLgorCSAqIFRoaXMgY2FsbCBpcyBkb2luZyB0aGUgc2Vjb25kIHBhc3MgdGhyb3Vn aCB0aGUgbGlzdHMuCisJICogSWYgaXQgZmFpbHMsIGZhbGwgYmFjayBvbiB0aGUgYnVsayByZWxv YWQuCiAJICovCi0JbnVtID0gZ2V0bW50aW5mbygmbW50YnVmcCwgTU5UX05PV0FJVCk7Ci0KLQlp ZiAobnVtID4gMCkgewotCQlidWlsZF9pb3ZlYygmaW92LCAmaW92bGVuLCAiZnN0eXBlIiwgTlVM TCwgMCk7Ci0JCWJ1aWxkX2lvdmVjKCZpb3YsICZpb3ZsZW4sICJmc3BhdGgiLCBOVUxMLCAwKTsK LQkJYnVpbGRfaW92ZWMoJmlvdiwgJmlvdmxlbiwgImZyb20iLCBOVUxMLCAwKTsKLQkJYnVpbGRf aW92ZWMoJmlvdiwgJmlvdmxlbiwgInVwZGF0ZSIsIE5VTEwsIDApOwotCQlidWlsZF9pb3ZlYygm aW92LCAmaW92bGVuLCAiZXhwb3J0IiwgJmV4cG9ydCwgc2l6ZW9mKGV4cG9ydCkpOwotCQlidWls ZF9pb3ZlYygmaW92LCAmaW92bGVuLCAiZXJybXNnIiwgZXJybXNnLCBzaXplb2YoZXJybXNnKSk7 Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0JCWZzcCA9ICZtbnRidWZwW2ld OwotCQlpZiAoZ2V0dmZzYnluYW1lKGZzcC0+Zl9mc3R5cGVuYW1lLCAmdmZjKSAhPSAwKSB7Ci0J CQlzeXNsb2coTE9HX0VSUiwgImdldHZmc2J5bmFtZSgpIGZhaWxlZCBmb3IgJXMiLAotCQkJICAg IGZzcC0+Zl9mc3R5cGVuYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KKwlpZiAocGFzc25vID09 IDEgJiYgY29tcGFyZV9ubW91bnRfZXhwb3J0bGlzdChpb3YsIGlvdmxlbiwgZXJybXNnKSA9PQor CSAgICAwKSB7CitzeXNsb2coTE9HX0VSUiwgImNvbXBhcmVvayIpOworCQkvKiBGcmVlIHVwIHRo ZSBvbGQgbGlzdHMuICovCisJCWZyZWVfZXhwb3J0cygmb2xkZXhwaGVhZCk7CisJfSBlbHNlIHsK K3N5c2xvZyhMT0dfRVJSLCAiZG9pbiBwYXNzbm89MCIpOwogCQkvKgotCQkgKiBXZSBkbyBub3Qg bmVlZCB0byBkZWxldGUgImV4cG9ydCIgZmxhZyBmcm9tCi0JCSAqIGZpbGVzeXN0ZW1zIHRoYXQg ZG8gbm90IGhhdmUgaXQgc2V0LgorCQkgKiBGaXJzdCwgZ2V0IHJpZCBvZiB0aGUgb2xkIGxpc3Rz LgogCQkgKi8KLQkJaWYgKCEoZnNwLT5mX2ZsYWdzICYgTU5UX0VYUE9SVEVEKSkKLQkJICAgIGNv bnRpbnVlOworCQlmcmVlX2V4cG9ydHMoJmV4cGhlYWQpOworCQlmcmVlX2V4cG9ydHMoJm9sZGV4 cGhlYWQpOworCQlmcmVlX3Y0cm9vdGV4cCgpOworCiAJCS8qCi0JCSAqIERvIG5vdCBkZWxldGUg ZXhwb3J0IGZvciBuZXR3b3JrIGZpbGVzeXN0ZW0gYnkKLQkJICogcGFzc2luZyAiZXhwb3J0IiBh cmcgdG8gbm1vdW50KCkuCi0JCSAqIEl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gZG8gdGhpcyBmb3Ig bG9jYWwgZmlsZXN5c3RlbXMuCisJCSAqIEFuZCBkZWxldGUgZXhwb3J0cyB0aGF0IGFyZSBpbiB0 aGUga2VybmVsIGZvciBhbGwgbG9jYWwKKwkJICogZmlsZXN5c3RlbXMuCisJCSAqIFhYWDogU2hv dWxkIGtub3cgaG93IHRvIGhhbmRsZSBhbGwgbG9jYWwgZXhwb3J0YWJsZQorCQkgKiBmaWxlc3lz dGVtcy4KIAkJICovCi0JCWlmICh2ZmMudmZjX2ZsYWdzICYgVkZDRl9ORVRXT1JLKQotCQkJY29u dGludWU7Ci0KLQkJaW92WzFdLmlvdl9iYXNlID0gZnNwLT5mX2ZzdHlwZW5hbWU7Ci0JCWlvdlsx XS5pb3ZfbGVuID0gc3RybGVuKGZzcC0+Zl9mc3R5cGVuYW1lKSArIDE7Ci0JCWlvdlszXS5pb3Zf YmFzZSA9IGZzcC0+Zl9tbnRvbm5hbWU7Ci0JCWlvdlszXS5pb3ZfbGVuID0gc3RybGVuKGZzcC0+ Zl9tbnRvbm5hbWUpICsgMTsKLQkJaW92WzVdLmlvdl9iYXNlID0gZnNwLT5mX21udGZyb21uYW1l OwotCQlpb3ZbNV0uaW92X2xlbiA9IHN0cmxlbihmc3AtPmZfbW50ZnJvbW5hbWUpICsgMTsKLQkJ ZXJybXNnWzBdID0gJ1wwJzsKLQotCQkvKgotCQkgKiBFWERFViBpcyByZXR1cm5lZCB3aGVuIHBh dGggZXhpc3RzIGJ1dCBpcyBub3QgYQotCQkgKiBtb3VudCBwb2ludC4gIE1heSBoYXBwZW5zIGlm IHJhY2VkIHdpdGggdW5tb3VudC4KLQkJICovCi0JCWlmIChubW91bnQoaW92LCBpb3ZsZW4sIGZz cC0+Zl9mbGFncykgPCAwICYmCi0JCSAgICBlcnJubyAhPSBFTk9FTlQgJiYgZXJybm8gIT0gRU5P VFNVUCAmJiBlcnJubyAhPSBFWERFVikgewotCQkJc3lzbG9nKExPR19FUlIsCi0JCQkgICAgImNh bid0IGRlbGV0ZSBleHBvcnRzIGZvciAlczogJW0gJXMiLAotCQkJICAgIGZzcC0+Zl9tbnRvbm5h bWUsIGVycm1zZyk7CisJCW51bSA9IGdldG1udGluZm8oJm1udGJ1ZnAsIE1OVF9OT1dBSVQpOwor CQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJCWZzcCA9ICZtbnRidWZwW2ldOwor CQkJZGVsZXRlX2V4cG9ydChpb3YsIGlvdmxlbiwgZnNwLCBlcnJtc2cpOwogCQl9CisKKworCQkv KiBSZWFkIHRoZSBleHBvcnQgZmlsZShzKSBhbmQgcHJvY2VzcyB0aGVtICovCisJCXJlYWRfZXhw b3J0ZmlsZSgwKTsKK3N5c2xvZyhMT0dfRVJSLCAicmVhZGV4cDAiKTsKIAl9CiAKIAlpZiAoaW92 ICE9IE5VTEwpIHsKQEAgLTE4MzgsNiArMTg2OCwyNSBAQCBnZXRfZXhwb3J0bGlzdCh2b2lkKQog CX0KIAogCS8qCisJICogSWYgdGhlcmUgd2FzIG5vIHB1YmxpYyBmaCwgY2xlYXIgYW55IHByZXZp b3VzIG9uZSBzZXQuCisJICovCisJaWYgKGhhc19wdWJsaWNmaCA9PSAwKQorCQkodm9pZCkgbmZz c3ZjKE5GU1NWQ19OT1BVQkxJQ0ZILCBOVUxMKTsKKworCS8qIFJlc3VtZSB0aGUgbmZzZC4gSWYg dGhleSB3ZXJlbid0IHN1c3BlbmRlZCwgdGhpcyBpcyBoYXJtbGVzcy4gKi8KKwkodm9pZCluZnNz dmMoTkZTU1ZDX1JFU1VNRU5GU0QsIE5VTEwpOworc3lzbG9nKExPR19FUlIsICJlbyBnZXRfZXhw b3J0bGlzdCIpOworfQorCisvKgorICogUmVhZCB0aGUgZXhwb3J0cyBmaWxlKHMpIGFuZCBjYWxs IGdldF9leHBvcnRsaXN0X29uZSgpIGZvciBlYWNoIGxpbmUuCisgKi8KK3N0YXRpYyB2b2lkCity ZWFkX2V4cG9ydGZpbGUoaW50IHBhc3NubykKK3sKKwlpbnQgZG9uZSwgaTsKKworCS8qCiAJICog UmVhZCBpbiB0aGUgZXhwb3J0cyBmaWxlIGFuZCBidWlsZCB0aGUgbGlzdCwgY2FsbGluZwogCSAq IG5tb3VudCgpIGFzIHdlIGdvIGFsb25nIHRvIHB1c2ggdGhlIGV4cG9ydCBydWxlcyBpbnRvIHRo ZSBrZXJuZWwuCiAJICovCkBAIC0xODQ5LDcgKzE4OTgsNyBAQCBnZXRfZXhwb3J0bGlzdCh2b2lk KQogCQkJc3lzbG9nKExPR19XQVJOSU5HLCAiY2FuJ3Qgb3BlbiAlcyIsIGV4bmFtZXNbaV0pOwog CQkJY29udGludWU7CiAJCX0KLQkJZ2V0X2V4cG9ydGxpc3Rfb25lKCk7CisJCWdldF9leHBvcnRs aXN0X29uZShwYXNzbm8pOwogCQlmY2xvc2UoZXhwX2ZpbGUpOwogCQlkb25lKys7CiAJfQpAQCAt MTg1NywxNSArMTkwNiwyNjcgQEAgZ2V0X2V4cG9ydGxpc3Qodm9pZCkKIAkJc3lzbG9nKExPR19F UlIsICJjYW4ndCBvcGVuIGFueSBleHBvcnRzIGZpbGUiKTsKIAkJZXhpdCgyKTsKIAl9Cit9CisK Ky8qCisgKiBDb21wYXJlIHRoZSBleHBvcnQgbGlzdHMgYWdhaW5zdCB0aGUgb2xkIG9uZXMgYW5k IGRvIG5tb3VudCgpIG9wZXJhdGlvbnMKKyAqIGZvciBhbnkgY2FzZXMgdGhhdCBoYXZlIGNoYW5n ZWQuICBUaGlzIGF2b2lkcyBkb2luZyBubW91bnQoKSBmb3IgZW50cmllcworICogdGhhdCBoYXZl IG5vdCBjaGFuZ2VkLgorICogUmV0dXJuIDAgdXBvbiBzdWNjZXNzLCAxIG90aGVyd2lzZS4KKyAq Lworc3RhdGljIGludAorY29tcGFyZV9ubW91bnRfZXhwb3J0bGlzdChzdHJ1Y3QgaW92ZWMgKmlv diwgaW50IGlvdmxlbiwgY2hhciAqZXJybXNnKQoreworCXN0cnVjdCBleHBvcnRsaXN0ICplcCwg Km9lcDsKKwlzdHJ1Y3QgZ3JvdXBsaXN0ICpncnA7CisJc3RydWN0IHN0YXRmcyBmcywgb2ZzOwor CWludCByZXQ7CiAKIAkvKgotCSAqIElmIHRoZXJlIHdhcyBubyBwdWJsaWMgZmgsIGNsZWFyIGFu eSBwcmV2aW91cyBvbmUgc2V0LgorCSAqIExvb3AgdGhyb3VnaCB0aGUgY3VycmVudCBsaXN0IGFu ZCBsb29rIGZvciBhbiBlbnRyeSBpbiB0aGUgb2xkCisJICogbGlzdC4KKwkgKiBJZiBmb3VuZCwg Y2hlY2sgdG8gc2VlIGlmIGl0IHRoZSBzYW1lLgorCSAqICAgICAgICBJZiBpdCBpcyBub3QgdGhl IHNhbWUsIGRlbGV0ZSBhbmQgcmUtZXhwb3J0LgorCSAqICAgICAgICBUaGVuIG1hcmsgaXQgZG9u ZSBvbiB0aGUgb2xkIGxpc3QuCisJICogZWxzZSAobm90IGZvdW5kKQorCSAqICAgICAgICBleHBv cnQgaXQuCisJICogQW55IGVudHJpZXMgbGVmdCBpbiB0aGUgb2xkIGxpc3QgYWZ0ZXIgcHJvY2Vz c2luZyBtdXN0IGhhdmUgdGhlaXIKKwkgKiBleHBvcnRzIGRlbGV0ZWQuCiAJICovCi0JaWYgKGhh c19wdWJsaWNmaCA9PSAwKQotCQkodm9pZCkgbmZzc3ZjKE5GU1NWQ19OT1BVQkxJQ0ZILCBOVUxM KTsKKwlTTElTVF9GT1JFQUNIKGVwLCAmZXhwaGVhZCwgZW50cmllcykgeworc3lzbG9nKExPR19F UlIsICJmb3JlYWNoIGVwIik7CisJCWlmIChzdGF0ZnMoZXAtPmV4X2ZzZGlyLCAmZnMpIDwgMCkK KwkJCXJldHVybiAoMSk7CitzeXNsb2coTE9HX0VSUiwgImZzdjA9JWQgZnN2MT0lZCIsIGZzLmZf ZnNpZC52YWxbMF0sIGZzLmZfZnNpZC52YWxbMV0pOworCQlTTElTVF9GT1JFQUNIKG9lcCwgJm9s ZGV4cGhlYWQsIGVudHJpZXMpIHsKK3N5c2xvZyhMT0dfRVJSLCAiZm9yZWFjaCBvZXAiKTsKKwkJ CWlmIChlcC0+ZXhfZnMudmFsWzBdID09IG9lcC0+ZXhfZnMudmFsWzBdICYmCisJCQkgICAgZXAt PmV4X2ZzLnZhbFsxXSA9PSBvZXAtPmV4X2ZzLnZhbFsxXSkgeworCQkJCS8qCisJCQkJICogU3Rh dGZzIGJvdGggZmlsZSBzeXN0ZW1zIGFuZCBzYW5pdHkgY2hlY2sKKwkJCQkgKiB0aGF0IHRoZXkg c3RpbGwgcmVmZXIgdG8gdGhlIHNhbWUgZmlsZQorCQkJCSAqIHN5c3RlbS4KKwkJCQkgKiBJZiBu b3QsIHJldHVybiAxIHNvIHRoYXQgdGhlIHJlbG9hZCBvZiB0aGUKKwkJCQkgKiBleHBvcnRzIHdp bGwgYmUgZG9uZSBpbiBidWxrLCB0aGUKKwkJCQkgKiBwYXNzbm8gPT0gMCB3YXkuCisJCQkJICov CitzeXNsb2coTE9HX0VSUiwgImZuZCBleCIpOworCQkJCWlmIChzdGF0ZnMob2VwLT5leF9mc2Rp ciwgJm9mcykgPCAwIHx8CisJCQkJICAgIGVwLT5leF9mcy52YWxbMF0gIT0gZnMuZl9mc2lkLnZh bFswXSB8fAorCQkJCSAgICBlcC0+ZXhfZnMudmFsWzFdICE9IGZzLmZfZnNpZC52YWxbMV0gfHwK KwkJCQkgICAgZnMuZl9mc2lkLnZhbFswXSAhPSBvZnMuZl9mc2lkLnZhbFswXSB8fAorCQkJCSAg ICBmcy5mX2ZzaWQudmFsWzFdICE9IG9mcy5mX2ZzaWQudmFsWzFdKQorCQkJCQlyZXR1cm4gKDEp OworCQkJCS8qCisJCQkJICogVGVzdCB0byBzZWUgaWYgdGhlIGVudHJ5IGlzIHRoZSBzYW1lLgor CQkJCSAqIElmIG5vdCB0aGUgc2FtZSBkZWxldGUgZXhwb3J0cyBhbmQKKwkJCQkgKiByZS1leHBv cnQuCisJCQkJICovCitzeXNsb2coTE9HX0VSUiwgImF0IGNvbXBhcmUiKTsKKwkJCQlpZiAoY29t cGFyZV9leHBvcnQoZXAsIG9lcCkgIT0gMCkgeworCQkJCQlkZWxldGVfZXhwb3J0KGlvdiwgaW92 bGVuLCAmZnMsIGVycm1zZyk7CisJCQkJCXJldCA9IGRvX2V4cG9ydF9tb3VudChlcCwgJmZzKTsK KwkJCQkJaWYgKHJldCAhPSAwKQorCQkJCQkJcmV0dXJuIChyZXQpOworCQkJCX0KKwkJCQlvZXAt PmV4X2ZsYWcgfD0gRVhfRE9ORTsKK3N5c2xvZyhMT0dfRVJSLCAiZXhkb25lIik7CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKwkJaWYgKG9lcCA9PSBOVUxMKSB7CitzeXNsb2coTE9HX0VSUiwgIm5v dCBmbmQgc28gZXgiKTsKKwkJCS8qIE5vdCBmb3VuZCwgc28gZG8gZXhwb3J0LiAqLworCQkJcmV0 ID0gZG9fZXhwb3J0X21vdW50KGVwLCAmZnMpOworCQkJaWYgKHJldCAhPSAwKQorCQkJCXJldHVy biAocmV0KTsKKwkJfQorCX0KKwlTTElTVF9GT1JFQUNIKG9lcCwgJm9sZGV4cGhlYWQsIGVudHJp ZXMpIHsKKwkJLyogRGVsZXRlIGV4cG9ydHMgbm90IGRvbmUuICovCisJCWlmICgob2VwLT5leF9m bGFnICYgRVhfRE9ORSkgPT0gMCkgeworc3lzbG9nKExPR19FUlIsICJub3QgZG9uZSBkZWxldGUi KTsKKwkJCWlmIChzdGF0ZnMob2VwLT5leF9mc2RpciwgJm9mcykgPj0gMCAmJgorCQkJICAgIG9l cC0+ZXhfZnMudmFsWzBdID09IG9mcy5mX2ZzaWQudmFsWzBdICYmCisJCQkgICAgb2VwLT5leF9m cy52YWxbMV0gPT0gb2ZzLmZfZnNpZC52YWxbMV0pCitzeXNsb2coTE9HX0VSUiwgImRvIGRlbGV0 ZSIpOworCQkJCWRlbGV0ZV9leHBvcnQoaW92LCBpb3ZsZW4sICZvZnMsIGVycm1zZyk7CisJCX0K Kwl9CiAKLQkvKiBSZXN1bWUgdGhlIG5mc2QuIElmIHRoZXkgd2VyZW4ndCBzdXNwZW5kZWQsIHRo aXMgaXMgaGFybWxlc3MuICovCi0JKHZvaWQpbmZzc3ZjKE5GU1NWQ19SRVNVTUVORlNELCBOVUxM KTsKKwkvKiBEbyB0aGUgVjQgcm9vdCBleHBvcnRzLCBhcyByZXF1aXJlZC4gKi8KKwlncnAgPSB2 NHJvb3RfZ3JwOworCXY0cm9vdF9waGFzZSA9IDI7CisJd2hpbGUgKHY0cm9vdF9lcCAhPSBOVUxM ICYmIGdycCAhPSBOVUxMKSB7CitzeXNsb2coTE9HX0VSUiwgInY0ZXggcGF0aD0lcyBncl90eXBl PTB4JXggZ3JfZXhmbGFncz0weCV4IiwgdjRyb290X2RpcnBhdGgsIGdycC0+Z3JfdHlwZSwgZ3Jw LT5ncl9leGZsYWdzKTsKK3N5c2xvZyhMT0dfRVJSLCAidjRyb290ZD0lcyIsIHY0cm9vdF9kaXJw YXRoKTsKKwkJcmV0ID0gZG9fbW91bnQodjRyb290X2VwLCBncnAsIGdycC0+Z3JfZXhmbGFncywg JmdycC0+Z3JfYW5vbiwKKwkJICAgIHY0cm9vdF9kaXJwYXRoLCBzdHJsZW4odjRyb290X2RpcnBh dGgpLCAmZnMpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXY0cm9vdF9waGFzZSA9IDA7CisJCQly ZXR1cm4gKHJldCk7CisJCX0KKwkJZ3JwID0gZ3JwLT5ncl9uZXh0OworCX0KKwl2NHJvb3RfcGhh c2UgPSAwOworCWZyZWVfdjRyb290ZXhwKCk7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIENv bXBhcmUgb2xkIGFuZCBjdXJyZW50IGV4cG9ydGxpc3QgZW50cmllcyBmb3IgdGhlIGZzaWQgYW5k IHJldHVybiAwCisgKiBpZiB0aGV5IGFyZSB0aGUgc2FtZSwgMSBvdGhlcndpc2UuCisgKi8KK3N0 YXRpYyBpbnQKK2NvbXBhcmVfZXhwb3J0KHN0cnVjdCBleHBvcnRsaXN0ICplcCwgc3RydWN0IGV4 cG9ydGxpc3QgKm9lcCkKK3sKKwlzdHJ1Y3QgZ3JvdXBsaXN0ICpncnAsICpvZ3JwOworCisJaWYg KHN0cmNtcChlcC0+ZXhfZnNkaXIsIG9lcC0+ZXhfZnNkaXIpICE9IDApCisJCXJldHVybiAoMSk7 CisJaWYgKChlcC0+ZXhfZGVmZGlyICE9IE5VTEwgJiYgb2VwLT5leF9kZWZkaXIgPT0gTlVMTCkg fHwKKwkgICAgKGVwLT5leF9kZWZkaXIgPT0gTlVMTCAmJiBvZXAtPmV4X2RlZmRpciAhPSBOVUxM KSkKKwkJcmV0dXJuICgxKTsKKwlpZiAoZXAtPmV4X2RlZmRpciAhPSBOVUxMKSB7CisJCWlmICgo ZXAtPmV4X2RlZmRpci0+ZHBfZmxhZyAmIERQX0RFRlNFVCkgIT0gMCkgeworCQkJaWYgKChvZXAt PmV4X2RlZmRpci0+ZHBfZmxhZyAmIERQX0RFRlNFVCkgPT0gMCkKKwkJCQlyZXR1cm4gKDEpOwor CQkJaWYgKGVwLT5leF9kZWZudW1zZWNmbGF2b3JzICE9CisJCQkgICAgb2VwLT5leF9kZWZudW1z ZWNmbGF2b3JzIHx8CisJCQkgICAgZXAtPmV4X2RlZmV4ZmxhZ3MgIT0gb2VwLT5leF9kZWZleGZs YWdzIHx8CisJCQkgICAgY29tcGFyZV9jcmVkKCZlcC0+ZXhfZGVmYW5vbiwgJm9lcC0+ZXhfZGVm YW5vbikgIT0KKwkJCSAgICAwIHx8IGNvbXBhcmVfc2VjZmxhdm9yKGVwLT5leF9kZWZzZWNmbGF2 b3JzLAorCQkJICAgIG9lcC0+ZXhfZGVmc2VjZmxhdm9ycywgZXAtPmV4X2RlZm51bXNlY2ZsYXZv cnMpICE9CisJCQkgICAgMCkKKwkJCQlyZXR1cm4gKDEpOworCQl9CisJfQorCisJLyogTm93LCBj aGVjayBhbGwgdGhlIGdyb3Vwcy4gKi8KKwlmb3IgKG9ncnAgPSBvZXAtPmV4X2dycGhlYWQ7IG9n cnAgIT0gTlVMTDsgb2dycCA9IG9ncnAtPmdyX25leHQpCisJCW9ncnAtPmdyX2ZsYWcgPSAwOwor CWZvciAoZ3JwID0gZXAtPmV4X2dycGhlYWQ7IGdycCAhPSBOVUxMOyBncnAgPSBncnAtPmdyX25l eHQpIHsKKwkJZm9yIChvZ3JwID0gb2VwLT5leF9ncnBoZWFkOyBvZ3JwICE9IE5VTEw7IG9ncnAg PQorCQkgICAgb2dycC0+Z3JfbmV4dCkKKwkJCWlmICgob2dycC0+Z3JfZmxhZyAmIEdSX0ZORCkg PT0gMCAmJgorCQkJICAgIGdycC0+Z3JfbnVtc2VjZmxhdm9ycyA9PSBvZ3JwLT5ncl9udW1zZWNm bGF2b3JzICYmCisJCQkgICAgZ3JwLT5ncl9leGZsYWdzID09IG9ncnAtPmdyX2V4ZmxhZ3MgJiYK KwkJCSAgICBjb21wYXJlX2NyZWQoJmdycC0+Z3JfYW5vbiwgJm9ncnAtPmdyX2Fub24pID09IDAg JiYKKwkJCSAgICBjb21wYXJlX3NlY2ZsYXZvcihncnAtPmdyX3NlY2ZsYXZvcnMsCisJCQkgICAg b2dycC0+Z3Jfc2VjZmxhdm9ycywgZ3JwLT5ncl9udW1zZWNmbGF2b3JzKSA9PSAwKQorCQkJCWJy ZWFrOworCQlpZiAob2dycCAhPSBOVUxMKQorCQkJb2dycC0+Z3JfZmxhZyB8PSBHUl9GTkQ7CisJ CWVsc2UKKwkJCXJldHVybiAoMSk7CisJfQorCWZvciAob2dycCA9IG9lcC0+ZXhfZ3JwaGVhZDsg b2dycCAhPSBOVUxMOyBvZ3JwID0gb2dycC0+Z3JfbmV4dCkKKwkJaWYgKChvZ3JwLT5ncl9mbGFn ICYgR1JfRk5EKSA9PSAwKQorCQkJcmV0dXJuICgxKTsKKwlyZXR1cm4gKDApOworfQorCisvKgor ICogQ29tcGFyZSB0byBzdHJ1Y3QgeHVjcmVkJ3MuICBSZXR1cm4gMCBpZiB0aGUgc2FtZSBhbmQg MSBvdGhlcndpc2UuCisgKiBUaGlzIGFsZ29yaXRobSBpcyBPKE4qKjIpIGJ1dCBmb3J0dW5hdGVs eSBOIGlzIGFsd2F5cyBzbWFsbC4KKyAqLworc3RhdGljIGludAorY29tcGFyZV9jcmVkKHN0cnVj dCB4dWNyZWQgKmNyMCwgc3RydWN0IHh1Y3JlZCAqY3IxKQoreworCWludCBpLCBqOworCisJaWYg KGNyMC0+Y3JfdWlkICE9IGNyMS0+Y3JfdWlkIHx8IGNyMC0+Y3Jfbmdyb3VwcyAhPSBjcjEtPmNy X25ncm91cHMpCisJCXJldHVybiAoMSk7CisJZm9yIChpID0gMDsgaSA8IGNyMC0+Y3Jfbmdyb3Vw czsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBjcjAtPmNyX25ncm91cHM7IGorKykKKwkJCWlm IChjcjAtPmNyX2dyb3Vwc1tpXSA9PSBjcjEtPmNyX2dyb3Vwc1tqXSkKKwkJCQlicmVhazsKKwkJ aWYgKGogPT0gY3IwLT5jcl9uZ3JvdXBzKQorCQkJcmV0dXJuICgxKTsKKwl9CisJcmV0dXJuICgw KTsKK30KKworLyoKKyAqIENvbXBhcmUgdHdvIGxpc3RzIG9mIHNlY3VyaXR5IGZsYXZvcnMuICBS ZXR1cm4gMCBpZiB0aGUgc2FtZSBhbmQgMSBvdGhlcndpc2UuCisgKiBUaGlzIGFsZ29yaXRobSBp cyBPKE4qKjIpIGJ1dCBmb3J0dW5hdGVseSBOIGlzIGFsd2F5cyBzbWFsbC4KKyAqLworc3RhdGlj IGludAorY29tcGFyZV9zZWNmbGF2b3IoaW50ICpzZWMxLCBpbnQgKnNlYzIsIGludCBuc2VjKQor eworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IG5zZWM7IGkrKykgeworCQlmb3IgKGog PSAwOyBqIDwgbnNlYzsgaisrKQorCQkJaWYgKHNlYzFbaV0gPT0gc2VjMltqXSkKKwkJCQlicmVh azsKKwkJaWYgKGogPT0gbnNlYykKKwkJCXJldHVybiAoMSk7CisJfQorCXJldHVybiAoMCk7Cit9 CisKKy8qCisgKiBEZWxldGUgYW4gZXhwb3J0cyBlbnRyeS4KKyAqLworc3RhdGljIHZvaWQKK2Rl bGV0ZV9leHBvcnQoc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZsZW4sIHN0cnVjdCBzdGF0ZnMg KmZzcCwgY2hhciAqZXJybXNnKQoreworCXN0cnVjdCB4dmZzY29uZiB2ZmM7CisKKwlpZiAoZ2V0 dmZzYnluYW1lKGZzcC0+Zl9mc3R5cGVuYW1lLCAmdmZjKSAhPSAwKSB7CisJCXN5c2xvZyhMT0df RVJSLCAiZ2V0dmZzYnluYW1lKCkgZmFpbGVkIGZvciAlcyIsCisJCSAgICBmc3AtPmZfZnN0eXBl bmFtZSk7CisJCXJldHVybjsKKwl9CisJCisJLyoKKwkgKiBXZSBkbyBub3QgbmVlZCB0byBkZWxl dGUgImV4cG9ydCIgZmxhZyBmcm9tCisJICogZmlsZXN5c3RlbXMgdGhhdCBkbyBub3QgaGF2ZSBp dCBzZXQuCisJICovCisJaWYgKCEoZnNwLT5mX2ZsYWdzICYgTU5UX0VYUE9SVEVEKSkKKwkJcmV0 dXJuOworCS8qCisJICogRG8gbm90IGRlbGV0ZSBleHBvcnQgZm9yIG5ldHdvcmsgZmlsZXN5c3Rl bSBieQorCSAqIHBhc3NpbmcgImV4cG9ydCIgYXJnIHRvIG5tb3VudCgpLgorCSAqIEl0IG9ubHkg bWFrZXMgc2Vuc2UgdG8gZG8gdGhpcyBmb3IgbG9jYWwgZmlsZXN5c3RlbXMuCisJICovCisJaWYg KHZmYy52ZmNfZmxhZ3MgJiBWRkNGX05FVFdPUkspCisJCXJldHVybjsKKwkKKwlpb3ZbMV0uaW92 X2Jhc2UgPSBmc3AtPmZfZnN0eXBlbmFtZTsKKwlpb3ZbMV0uaW92X2xlbiA9IHN0cmxlbihmc3At PmZfZnN0eXBlbmFtZSkgKyAxOworCWlvdlszXS5pb3ZfYmFzZSA9IGZzcC0+Zl9tbnRvbm5hbWU7 CisJaW92WzNdLmlvdl9sZW4gPSBzdHJsZW4oZnNwLT5mX21udG9ubmFtZSkgKyAxOworCWlvdls1 XS5pb3ZfYmFzZSA9IGZzcC0+Zl9tbnRmcm9tbmFtZTsKKwlpb3ZbNV0uaW92X2xlbiA9IHN0cmxl bihmc3AtPmZfbW50ZnJvbW5hbWUpICsgMTsKKwllcnJtc2dbMF0gPSAnXDAnOworCQorCS8qCisJ ICogRVhERVYgaXMgcmV0dXJuZWQgd2hlbiBwYXRoIGV4aXN0cyBidXQgaXMgbm90IGEKKwkgKiBt b3VudCBwb2ludC4gIE1heSBoYXBwZW5zIGlmIHJhY2VkIHdpdGggdW5tb3VudC4KKwkgKi8KKwlp ZiAobm1vdW50KGlvdiwgaW92bGVuLCBmc3AtPmZfZmxhZ3MpIDwgMCAmJiBlcnJubyAhPSBFTk9F TlQgJiYKKwkgICAgZXJybm8gIT0gRU5PVFNVUCAmJiBlcnJubyAhPSBFWERFVikgeworCQlzeXNs b2coTE9HX0VSUiwKKwkJICAgICJjYW4ndCBkZWxldGUgZXhwb3J0cyBmb3IgJXM6ICVtICVzIiwK KwkJICAgIGZzcC0+Zl9tbnRvbm5hbWUsIGVycm1zZyk7CisJfQorfQorCisvKgorICogRnJlZSB1 cCB0aGUgZXhwb3J0cyBsaXN0cyBwYXNzZWQgaW4gYXMgYXJndW1lbnRzLgorICovCitzdGF0aWMg dm9pZAorZnJlZV9leHBvcnRzKHN0cnVjdCBleHBvcnRsaXN0aGVhZCAqZXhocCkKK3sKKwlzdHJ1 Y3QgZXhwb3J0bGlzdCAqZXAsICplcDI7CisKKwlTTElTVF9GT1JFQUNIX1NBRkUoZXAsIGV4aHAs IGVudHJpZXMsIGVwMikgeworCQlTTElTVF9SRU1PVkUoZXhocCwgZXAsIGV4cG9ydGxpc3QsIGVu dHJpZXMpOworCQlmcmVlX2V4cChlcCk7CisJfQorCVNMSVNUX0lOSVQoZXhocCk7CiB9CiAKIC8q CkBAIC0xOTY1LDcgKzIyNjYsNyBAQCBhZGRfZXhwZGlyKHN0cnVjdCBkaXJsaXN0ICoqZHBwLCBj aGFyICpjCiAgKi8KIHN0YXRpYyB2b2lkCiBoYW5nX2RpcnAoc3RydWN0IGRpcmxpc3QgKmRwLCBz dHJ1Y3QgZ3JvdXBsaXN0ICpncnAsIHN0cnVjdCBleHBvcnRsaXN0ICplcCwKLQlpbnQgZmxhZ3Mp CisJaW50IGZsYWdzLCBzdHJ1Y3QgeHVjcmVkICphbm9uY3JwLCBpbnQgZXhmbGFncykKIHsKIAlz dHJ1Y3QgaG9zdGxpc3QgKmhwOwogCXN0cnVjdCBkaXJsaXN0ICpkcDI7CkBAIC0xOTgyLDYgKzIy ODMsOCBAQCBoYW5nX2RpcnAoc3RydWN0IGRpcmxpc3QgKmRwLCBzdHJ1Y3QgZ3JvCiAJCQlpZiAo ZXAtPmV4X251bXNlY2ZsYXZvcnMgPiAwKQogCQkJCW1lbWNweShlcC0+ZXhfZGVmc2VjZmxhdm9y cywgZXAtPmV4X3NlY2ZsYXZvcnMsCiAJCQkJICAgIHNpemVvZihlcC0+ZXhfc2VjZmxhdm9ycykp OworCQkJZXAtPmV4X2RlZmFub24gPSAqYW5vbmNycDsKKwkJCWVwLT5leF9kZWZleGZsYWdzID0g ZXhmbGFnczsKIAkJfSBlbHNlIHdoaWxlIChncnApIHsKIAkJCWhwID0gZ2V0X2h0KCk7CiAJCQlo cC0+aHRfZ3JwID0gZ3JwOwpAQCAtMjQwMyw2ICsyNzA2LDcgQEAgZ2V0X2hvc3QoY2hhciAqY3As IHN0cnVjdCBncm91cGxpc3QgKmdycAogc3RhdGljIHZvaWQKIGZyZWVfZXhwKHN0cnVjdCBleHBv cnRsaXN0ICplcCkKIHsKKwlzdHJ1Y3QgZ3JvdXBsaXN0ICpncnAsICp0Z3JwOwogCiAJaWYgKGVw LT5leF9kZWZkaXIpIHsKIAkJZnJlZV9ob3N0KGVwLT5leF9kZWZkaXItPmRwX2hvc3RzKTsKQEAg LTI0MTMsMTAgKzI3MTcsMzcgQEAgZnJlZV9leHAoc3RydWN0IGV4cG9ydGxpc3QgKmVwKQogCWlm IChlcC0+ZXhfaW5kZXhmaWxlKQogCQlmcmVlKGVwLT5leF9pbmRleGZpbGUpOwogCWZyZWVfZGly KGVwLT5leF9kaXJsKTsKKwl0Z3JwID0gZXAtPmV4X2dycGhlYWQ7CisJd2hpbGUgKHRncnAgIT0g TlVMTCkgeworCQlncnAgPSB0Z3JwOworCQl0Z3JwID0gdGdycC0+Z3JfbmV4dDsKKwkJZnJlZV9n cnAoZ3JwKTsKKwl9CiAJZnJlZSgoY2FkZHJfdCllcCk7CiB9CiAKIC8qCisgKiBGcmVlIHVwIHRo ZSB2NHJvb3QgZXhwb3J0cy4KKyAqLworc3RhdGljIHZvaWQKK2ZyZWVfdjRyb290ZXhwKHZvaWQp Cit7CisJc3RydWN0IGdyb3VwbGlzdCAqZ3JwLCAqdGdycDsKKworCWlmICh2NHJvb3RfZXAgIT0g TlVMTCkgeworCQlmcmVlX2V4cCh2NHJvb3RfZXApOworCQl2NHJvb3RfZXAgPSBOVUxMOworCX0K Kwl0Z3JwID0gdjRyb290X2dycDsKKwl2NHJvb3RfZ3JwID0gTlVMTDsKKwl3aGlsZSAodGdycCAh PSBOVUxMKSB7CisJCWdycCA9IHRncnA7CisJCXRncnAgPSB0Z3JwLT5ncl9uZXh0OworCQlmcmVl X2dycChncnApOworCX0KK30KKworLyoKICAqIEZyZWUgaG9zdHMuCiAgKi8KIHN0YXRpYyB2b2lk CkBAIC0yNDU2LDYgKzI3ODcsNDQgQEAgb3V0X29mX21lbSh2b2lkKQogfQogCiAvKgorICogQ2Fs bCBkb19tb3VudCgpIGZyb20gdGhlIHN0cnVjdCBleHBvcnRsaXN0LCBmb3IgZWFjaCBjYXNlIG5l ZWRlZC4KKyAqLworc3RhdGljIGludAorZG9fZXhwb3J0X21vdW50KHN0cnVjdCBleHBvcnRsaXN0 ICplcCwgc3RydWN0IHN0YXRmcyAqZnNwKQoreworCXN0cnVjdCBkaXJsaXN0ICpkcDsKKwlzdHJ1 Y3QgZ3JvdXBsaXN0ICpncnAsIGRlZmdycDsKKwlpbnQgcmV0OworCXNpemVfdCBkaXJsZW47CisK K3N5c2xvZyhMT0dfRVJSLCAiZG9fbW91bnRfZXhwb3J0PSVzIiwgZXAtPmV4X2ZzZGlyKTsKKwlk aXJsZW4gPSBzdHJsZW4oZXAtPmV4X2ZzZGlyKTsKKwlkcCA9IGVwLT5leF9kZWZkaXI7CisJaWYg KGRwICE9IE5VTEwgJiYgKGRwLT5kcF9mbGFnICYgRFBfREVGU0VUKSAhPSAwKSB7CisJCWRlZmdy cC5ncl90eXBlID0gR1RfREVGQVVMVDsKKwkJZGVmZ3JwLmdyX25leHQgPSBOVUxMOworCQkvKiBX ZSBoYXZlIGFuIGVudHJ5IGZvciBhbGwgb3RoZXIgaG9zdHMvbmV0cy4gKi8KK3N5c2xvZyhMT0df RVJSLCAiZXhfZGVmZXhmbGFncz0weCV4IiwgZXAtPmV4X2RlZmV4ZmxhZ3MpOworCQlyZXQgPSBk b19tb3VudChlcCwgJmRlZmdycCwgZXAtPmV4X2RlZmV4ZmxhZ3MsICZlcC0+ZXhfZGVmYW5vbiwK KwkJICAgIGVwLT5leF9mc2RpciwgZGlybGVuLCBmc3ApOworCQlpZiAocmV0ICE9IDApCisJCQly ZXR1cm4gKHJldCk7CisJfQorCisJLyogRG8gYSBtb3VudCBmb3IgZWFjaCBncm91cC4gKi8KKwln cnAgPSBlcC0+ZXhfZ3JwaGVhZDsKKwl3aGlsZSAoZ3JwICE9IE5VTEwpIHsKK3N5c2xvZyhMT0df RVJSLCAiZG8gbW91bnQgZ3JfdHlwZT0weCV4IGdyX2V4ZmxhZ3M9MHgleCIsIGdycC0+Z3JfdHlw ZSwgZ3JwLT5ncl9leGZsYWdzKTsKKwkJcmV0ID0gZG9fbW91bnQoZXAsIGdycCwgZ3JwLT5ncl9l eGZsYWdzLCAmZ3JwLT5ncl9hbm9uLAorCQkgICAgZXAtPmV4X2ZzZGlyLCBkaXJsZW4sIGZzcCk7 CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiAocmV0KTsKKwkJZ3JwID0gZ3JwLT5ncl9uZXh0 OworCX0KKwlyZXR1cm4gKDApOworfQorCisvKgogICogRG8gdGhlIG5tb3VudCgpIHN5c2NhbGwg d2l0aCB0aGUgdXBkYXRlIGZsYWcgdG8gcHVzaCB0aGUgZXhwb3J0IGluZm8gaW50bwogICogdGhl IGtlcm5lbC4KICAqLwpAQCAtMjQ4Nyw2ICsyODU2LDcgQEAgZG9fbW91bnQoc3RydWN0IGV4cG9y dGxpc3QgKmVwLCBzdHJ1Y3QgZwogCWJ6ZXJvKGVycm1zZywgc2l6ZW9mKGVycm1zZykpOwogCWVh cC0+ZXhfZmxhZ3MgPSBleGZsYWdzOwogCWVhcC0+ZXhfYW5vbiA9ICphbm9uY3JwOworc3lzbG9n KExPR19FUlIsICJkb19leGZsYWdzPTB4JXgiLCBleGZsYWdzKTsKIAllYXAtPmV4X2luZGV4Zmls ZSA9IGVwLT5leF9pbmRleGZpbGU7CiAJaWYgKGdycC0+Z3JfdHlwZSA9PSBHVF9IT1NUKQogCQlh aSA9IGdycC0+Z3JfcHRyLmd0X2FkZHJpbmZvOwo= --_002_YQBPR0101MB22608FE3367E1DBD64ED01E1DD310YQBPR0101MB2260_--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?YQBPR0101MB22608FE3367E1DBD64ED01E1DD310>