Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Feb 2014 20:58:35 -0500 (EST)
From:      Rick Macklem <rmacklem@uoguelph.ca>
To:        Garrett Wollman <wollman@freebsd.org>
Cc:        freebsd-net@freebsd.org, Alexander Motin <mav@freebsd.org>
Subject:   Re: Terrible NFS performance under 9.2-RELEASE?
Message-ID:  <1261040377.1982994.1391738315028.JavaMail.root@uoguelph.ca>
In-Reply-To: <CABXB=RRFfparjXm7_f6aaWHHbpUBoDWOLsjTyWdZmyKx3d2zAw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
------=_Part_1982991_1248016500.1391738315025
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

Garrett Wollman wrote:
> The real big improvement, which I have not tried to implement, would
> be to use physical pages (via sfbufs) by sharing the inner loop of
> sendfile(2).  Since I use ZFS as my backing filesystem, I'm not sure
> this would have any benefit for me, but it should be a measurable
> improvement for UFS-backed NFS servers.
(I didn't have this email handy, so I just cut/pasted this paragraph.)

Well, I'm far from sure this is a good idea at this point, but I've
attached a patch that seems to work for a short test of an export of
a UFS volume. (If there is no v_object for ZFS vnodes, it will print
out a message with the error# for EINVAL.) It would need some serious
review and testing before it would be anywhere near ready for head.
(For example, since I hold a LK_SHARED locked vnode which was not
 VI_DOOMED when it was locked, I don't know if I need to acquire a
 reference count on the vm object or if I need to check for OBJ_DEAD?)
The patch checks for OBJ_DEAD, but does not acquire a reference count.
(The reference count part is #ifdef notnow.)

Like most of these things, I don't see a measurable difference on my
old single core i386 hardware with 100Mbps networking, but that only
indicates it might not be a serious regression.

The patch doesn't have yours applied to it, but it should be easy
to integrate the two, since it just adds a call to nfsrv_file_mbuf()
at the beginning of nfsvno_read().

Good luck with the testing, rick
ps: It would be nice to know if it works for ZFS?
pss: If the patch doesn't make it through on the list and you want a
     copy, just email me.


------=_Part_1982991_1248016500.1391738315025
Content-Type: text/x-patch; name=sendfile-nfs.patch
Content-Disposition: attachment; filename=sendfile-nfs.patch
Content-Transfer-Encoding: base64

LS0tIGtlcm4vdWlwY19zeXNjYWxscy5jLnNhdjMJMjAxNC0wMi0wNCAxOToyMjo1Mi4wMDAwMDAw
MDAgLTA1MDAKKysrIGtlcm4vdWlwY19zeXNjYWxscy5jCTIwMTQtMDItMDYgMTg6MjM6NDcuMDAw
MDAwMDAwIC0wNTAwCkBAIC0xOTUwLDYgKzE5NTAsMTc2IEBAIGZyZWVic2Q0X3NlbmRmaWxlKHN0
cnVjdCB0aHJlYWQgKnRkLCBzdHIKIH0KICNlbmRpZiAvKiBDT01QQVRfRlJFRUJTRDQgKi8KIAor
LyoKKyAqIFRoZSBpbm5lciBsb29wIG9mIGtlcm5fc2VuZGZpbGUoKSBleHRyYWN0ZWQgb3V0IHNv
IHRoYXQgaXQgY2FuIGJlCisgKiB1c2VkIGJ5IHRoZSBORlMgc2VydmVyIGFzIHdlbGwuCisgKi8K
K2ludAora2Vybl9zZW5kZmlsZV9tYnVmKHN0cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCB2bV9vYmpl
Y3QgKm9iaiwgc3RydWN0IG1idWYgKiptcCwKKyAgICBzdHJ1Y3QgbWJ1ZiAqKm10YWlscCwgb2Zm
X3Qgb2ZmLCBvZmZfdCAqcmVtcCwgaW50IGJzaXplLCBpbnQgKmRvbmVwLAorICAgIGludCBzcGFj
ZSwgaW50IG1udywgaW50IHdhaXRfZm9yYWxsLCBpbnQgZmxhZ3MsIGludCBpb2ZsYWdzLCB2b2lk
ICpzZnNwLAorICAgIHN0cnVjdCB1Y3JlZCAqYWNyZWQsIHN0cnVjdCB0aHJlYWQgKnRkKQorewor
CW9mZl90IHhmc2l6ZSwgc3RhcnRyZW07CisJdm1fcGluZGV4X3QgcGluZGV4OworCXZtX29mZnNl
dF90IHBnb2ZmOworCXN0cnVjdCB2bV9wYWdlICpwZzsKKwlzdHJ1Y3QgbWJ1ZiAqbTAsICptLCAq
bXRhaWw7CisJc3RydWN0IHNmX2J1ZiAqc2Y7CisJaW50IGVycm9yID0gMCwgbG9vcGJ5dGVzOwor
CXNzaXplX3QgcmVzaWQ7CisJaW50IHJlYWRhaGVhZCA9IHNmcmVhZGFoZWFkICogTUFYQlNJWkU7
CisJc3RydWN0IHNlbmRmaWxlX3N5bmMgKnNmcyA9IChzdHJ1Y3Qgc2VuZGZpbGVfc3luYyAqKXNm
c3A7CisKKwltID0gKm1wOworCW10YWlsID0gKm10YWlscDsKKwlzdGFydHJlbSA9ICpyZW1wOwor
CWxvb3BieXRlcyA9IDA7CisJLyoKKwkgKiBMb29wIGFuZCBjb25zdHJ1Y3QgbWF4aW11bSBzaXpl
ZCBtYnVmIGNoYWluIHRvIGJlIGJ1bGsKKwkgKiBkdW1wZWQgaW50byBzb2NrZXQgYnVmZmVyLgor
CSAqLworCXdoaWxlIChzcGFjZSA+IGxvb3BieXRlcykgeworCQkvKgorCQkgKiBDYWxjdWxhdGUg
dGhlIGFtb3VudCB0byB0cmFuc2Zlci4KKwkJICogTm90IHRvIGV4Y2VlZCBhIHBhZ2UsIHRoZSBF
T0YsCisJCSAqIG9yIHRoZSBwYXNzZWQgaW4gbmJ5dGVzLgorCQkgKi8KKwkJcGdvZmYgPSAodm1f
b2Zmc2V0X3QpKG9mZiAmIFBBR0VfTUFTSyk7CisJCSpyZW1wID0gc3RhcnRyZW0gLSBsb29wYnl0
ZXM7CisJCXhmc2l6ZSA9IG9taW4oUEFHRV9TSVpFIC0gcGdvZmYsICpyZW1wKTsKKwkJeGZzaXpl
ID0gb21pbihzcGFjZSAtIGxvb3BieXRlcywgeGZzaXplKTsKKwkJaWYgKHhmc2l6ZSA8PSAwKSB7
CisJCQkqZG9uZXAgPSAxOwkJLyogYWxsIGRhdGEgc2VudCAqLworCQkJYnJlYWs7CisJCX0KKwor
CQkvKgorCQkgKiBBdHRlbXB0IHRvIGxvb2sgdXAgdGhlIHBhZ2UuICBBbGxvY2F0ZQorCQkgKiBp
ZiBub3QgZm91bmQgb3Igd2FpdCBhbmQgbG9vcCBpZiBidXN5LgorCQkgKi8KKwkJcGluZGV4ID0g
T0ZGX1RPX0lEWChvZmYpOworCQlWTV9PQkpFQ1RfV0xPQ0sob2JqKTsKKwkJcGcgPSB2bV9wYWdl
X2dyYWIob2JqLCBwaW5kZXgsIFZNX0FMTE9DX05PQlVTWSB8CisJCSAgICBWTV9BTExPQ19OT1JN
QUwgfCBWTV9BTExPQ19XSVJFRCB8IFZNX0FMTE9DX1JFVFJZKTsKKworCQkvKgorCQkgKiBDaGVj
ayBpZiBwYWdlIGlzIHZhbGlkIGZvciB3aGF0IHdlIG5lZWQsCisJCSAqIG90aGVyd2lzZSBpbml0
aWF0ZSBJL08uCisJCSAqIElmIHdlIGFscmVhZHkgdHVybmVkIHNvbWUgcGFnZXMgaW50byBtYnVm
cywKKwkJICogc2VuZCB0aGVtIG9mZiBiZWZvcmUgd2UgY29tZSBoZXJlIGFnYWluIGFuZAorCQkg
KiBibG9jay4KKwkJICovCisJCWlmIChwZy0+dmFsaWQgJiYgdm1fcGFnZV9pc192YWxpZChwZywg
cGdvZmYsIHhmc2l6ZSkpCisJCQlWTV9PQkpFQ1RfV1VOTE9DSyhvYmopOworCQllbHNlIGlmICht
ICE9IE5VTEwgJiYgd2FpdF9mb3JhbGwgPT0gMCkKKwkJCWVycm9yID0gRUFHQUlOOwkvKiBzZW5k
IHdoYXQgd2UgYWxyZWFkeSBnb3QgKi8KKwkJZWxzZSBpZiAoZmxhZ3MgJiBTRl9OT0RJU0tJTykK
KwkJCWVycm9yID0gRUJVU1k7CisJCWVsc2UgeworCQkJVk1fT0JKRUNUX1dVTkxPQ0sob2JqKTsK
KworCQkJLyoKKwkJCSAqIEdldCB0aGUgcGFnZSBmcm9tIGJhY2tpbmcgc3RvcmUuCisJCQkgKiBY
WFhNQUM6IEJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBmcC0+Zl9jcmVkCisJCQkgKiBoZXJlLCB3ZSBw
YXNzIGluIE5PQ1JFRC4gIFRoaXMgaXMgcHJvYmFibHkKKwkJCSAqIHdyb25nLCBidXQgaXMgY29u
c2lzdGVudCB3aXRoIG91ciBvcmlnaW5hbAorCQkJICogaW1wbGVtZW50YXRpb24uCisJCQkgKi8K
KwkJCWVycm9yID0gdm5fcmR3cihVSU9fUkVBRCwgdnAsIE5VTEwsIHJlYWRhaGVhZCwKKwkJCSAg
ICB0cnVuY19wYWdlKG9mZiksIFVJT19OT0NPUFksIGlvZmxhZ3MgfAorCQkJICAgICgocmVhZGFo
ZWFkIC8gYnNpemUpIDw8IElPX1NFUVNISUZUKSwKKwkJCSAgICB0ZC0+dGRfdWNyZWQsIGFjcmVk
LCAmcmVzaWQsIHRkKTsKKwkJCVNGU1RBVF9JTkMoc2ZfaW9jbnQpOworCQkJaWYgKGVycm9yKQor
CQkJCVZNX09CSkVDVF9XTE9DSyhvYmopOworCQl9CisJCWlmIChlcnJvcikgeworCQkJdm1fcGFn
ZV9sb2NrKHBnKTsKKwkJCXZtX3BhZ2VfdW53aXJlKHBnLCAwKTsKKwkJCS8qCisJCQkgKiBTZWUg
aWYgYW55b25lIGVsc2UgbWlnaHQga25vdyBhYm91dAorCQkJICogdGhpcyBwYWdlLiAgSWYgbm90
IGFuZCBpdCBpcyBub3QgdmFsaWQsCisJCQkgKiB0aGVuIGZyZWUgaXQuCisJCQkgKi8KKwkJCWlm
IChwZy0+d2lyZV9jb3VudCA9PSAwICYmIHBnLT52YWxpZCA9PSAwICYmCisJCQkgICAgIXZtX3Bh
Z2VfYnVzaWVkKHBnKSkKKwkJCQl2bV9wYWdlX2ZyZWUocGcpOworCQkJdm1fcGFnZV91bmxvY2so
cGcpOworCQkJVk1fT0JKRUNUX1dVTkxPQ0sob2JqKTsKKwkJCWlmIChlcnJvciA9PSBFQUdBSU4g
JiYgd2FpdF9mb3JhbGwgPT0gMCkKKwkJCQllcnJvciA9IDA7CS8qIG5vdCBhIHJlYWwgZXJyb3Ig
Ki8KKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogR2V0IGEgc2VuZGZpbGUgYnVmLiAgV2hl
biBhbGxvY2F0aW5nIHRoZQorCQkgKiBmaXJzdCBidWZmZXIgZm9yIG1idWYgY2hhaW4sIHdlIHVz
dWFsbHkKKwkJICogd2FpdCBhcyBsb25nIGFzIG5lY2Vzc2FyeSwgYnV0IHRoaXMgd2FpdAorCQkg
KiBjYW4gYmUgaW50ZXJydXB0ZWQuICBGb3IgY29uc2VxdWVudAorCQkgKiBidWZmZXJzLCBkbyBu
b3Qgc2xlZXAsIHNpbmNlIHNldmVyYWwKKwkJICogdGhyZWFkcyBtaWdodCBleGhhdXN0IHRoZSBi
dWZmZXJzIGFuZCB0aGVuCisJCSAqIGRlYWRsb2NrLgorCQkgKi8KKwkJc2YgPSBzZl9idWZfYWxs
b2MocGcsIChtbncgfHwgKG0gIT0gTlVMTCAmJiB3YWl0X2ZvcmFsbCA9PSAwKSkgPworCQkgICAg
U0ZCX05PV0FJVCA6IFNGQl9DQVRDSCk7CisJCWlmIChzZiA9PSBOVUxMKSB7CisJCQlTRlNUQVRf
SU5DKHNmX2FsbG9jZmFpbCk7CisJCQl2bV9wYWdlX2xvY2socGcpOworCQkJdm1fcGFnZV91bndp
cmUocGcsIDApOworCQkJS0FTU0VSVChwZy0+b2JqZWN0ICE9IE5VTEwsCisJCQkgICAgKCJrZXJu
X3NlbmRmaWxlOiBvYmplY3QgZGlzYXBwZWFyZWQiKSk7CisJCQl2bV9wYWdlX3VubG9jayhwZyk7
CisJCQlpZiAobSA9PSBOVUxMKQorCQkJCWVycm9yID0gKG1udyA/IEVBR0FJTiA6IEVJTlRSKTsK
KwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogR2V0IGFuIG1idWYgYW5kIHNldCBpdCB1cCBh
cyBoYXZpbmcKKwkJICogZXh0ZXJuYWwgc3RvcmFnZS4KKwkJICovCisJCW0wID0gbV9nZXQoKG1u
dyA/IE1fTk9XQUlUIDogTV9XQUlUT0spLCBNVF9EQVRBKTsKKwkJaWYgKG0wID09IE5VTEwpIHsK
KwkJCWVycm9yID0gKG1udyA/IEVBR0FJTiA6IEVOT0JVRlMpOworCQkJc2ZfYnVmX21leHQoTlVM
TCwgc2YpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG1fZXh0YWRkKG0wLCAoY2FkZHJfdCApc2Zf
YnVmX2t2YShzZiksIFBBR0VfU0laRSwKKwkJICAgIHNmX2J1Zl9tZXh0LCBzZnMsIHNmLCBNX1JE
T05MWSwgRVhUX1NGQlVGLAorCQkgICAgKG1udyA/IE1fTk9XQUlUIDogTV9XQUlUT0spKSAhPSAw
KSB7CisJCQllcnJvciA9IChtbncgPyBFQUdBSU4gOiBFTk9CVUZTKTsKKwkJCXNmX2J1Zl9tZXh0
KE5VTEwsIHNmKTsKKwkJCW1fZnJlZW0obTApOworCQkJYnJlYWs7CisJCX0KKwkJbTAtPm1fZGF0
YSA9IChjaGFyICopc2ZfYnVmX2t2YShzZikgKyBwZ29mZjsKKwkJbTAtPm1fbGVuID0geGZzaXpl
OworCisJCS8qIEFwcGVuZCB0byBtYnVmIGNoYWluLiAqLworCQlpZiAobXRhaWwgIT0gTlVMTCkK
KwkJCW10YWlsLT5tX25leHQgPSBtMDsKKwkJZWxzZSBpZiAobSAhPSBOVUxMKQorCQkJbV9sYXN0
KG0pLT5tX25leHQgPSBtMDsKKwkJZWxzZQorCQkJbSA9IG0wOworCQltdGFpbCA9IG0wOworCisJ
CS8qIEtlZXAgdHJhY2sgb2YgYml0cyBwcm9jZXNzZWQuICovCisJCWxvb3BieXRlcyArPSB4ZnNp
emU7CisJCW9mZiArPSB4ZnNpemU7CisKKwkJaWYgKHNmcyAhPSBOVUxMKSB7CisJCQltdHhfbG9j
aygmc2ZzLT5tdHgpOworCQkJc2ZzLT5jb3VudCsrOworCQkJbXR4X3VubG9jaygmc2ZzLT5tdHgp
OworCQl9CisJfQorCSptcCA9IG07CisJKm10YWlscCA9IG10YWlsOworCXJldHVybiAoZXJyb3Ip
OworfQorCiBpbnQKIGtlcm5fc2VuZGZpbGUoc3RydWN0IHRocmVhZCAqdGQsIHN0cnVjdCBzZW5k
ZmlsZV9hcmdzICp1YXAsCiAgICAgc3RydWN0IHVpbyAqaGRyX3Vpbywgc3RydWN0IHVpbyAqdHJs
X3VpbywgaW50IGNvbXBhdCkKQEAgLTE5NTksMTAgKzIxMjksOCBAQCBrZXJuX3NlbmRmaWxlKHN0
cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3QgCiAJc3RydWN0IHZtX29iamVjdCAqb2JqID0gTlVMTDsK
IAlzdHJ1Y3Qgc29ja2V0ICpzbyA9IE5VTEw7CiAJc3RydWN0IG1idWYgKm0gPSBOVUxMOwotCXN0
cnVjdCBzZl9idWYgKnNmOwotCXN0cnVjdCB2bV9wYWdlICpwZzsKIAlzdHJ1Y3QgdmF0dHIgdmE7
Ci0Jb2ZmX3Qgb2ZmLCB4ZnNpemUsIGZzYnl0ZXMgPSAwLCBzYnl0ZXMgPSAwLCByZW0gPSAwOwor
CW9mZl90IG9mZiwgZnNieXRlcyA9IDAsIHNieXRlcyA9IDAsIHJlbSA9IDA7CiAJaW50IGVycm9y
LCBoZHJsZW4gPSAwLCBtbncgPSAwOwogCWludCBic2l6ZTsKIAlzdHJ1Y3Qgc2VuZGZpbGVfc3lu
YyAqc2ZzID0gTlVMTDsKQEAgLTIxMDUsNyArMjI3Myw2IEBAIGtlcm5fc2VuZGZpbGUoc3RydWN0
IHRocmVhZCAqdGQsIHN0cnVjdCAKIAkgKi8KIAlmb3IgKG9mZiA9IHVhcC0+b2Zmc2V0OyA7ICkg
ewogCQlzdHJ1Y3QgbWJ1ZiAqbXRhaWw7Ci0JCWludCBsb29wYnl0ZXM7CiAJCWludCBzcGFjZTsK
IAkJaW50IGRvbmU7CiAKQEAgLTIxMTQsNyArMjI4MSw2IEBAIGtlcm5fc2VuZGZpbGUoc3RydWN0
IHRocmVhZCAqdGQsIHN0cnVjdCAKIAkJCWJyZWFrOwogCiAJCW10YWlsID0gTlVMTDsKLQkJbG9v
cGJ5dGVzID0gMDsKIAkJc3BhY2UgPSAwOwogCQlkb25lID0gMDsKIApAQCAtMjE5MywxNTcgKzIz
NTksMTUgQEAgcmV0cnlfc3BhY2U6CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQkvKgotCQkgKiBM
b29wIGFuZCBjb25zdHJ1Y3QgbWF4aW11bSBzaXplZCBtYnVmIGNoYWluIHRvIGJlIGJ1bGsKLQkJ
ICogZHVtcGVkIGludG8gc29ja2V0IGJ1ZmZlci4KLQkJICovCi0JCXdoaWxlIChzcGFjZSA+IGxv
b3BieXRlcykgewotCQkJdm1fcGluZGV4X3QgcGluZGV4OwotCQkJdm1fb2Zmc2V0X3QgcGdvZmY7
Ci0JCQlzdHJ1Y3QgbWJ1ZiAqbTA7Ci0KLQkJCS8qCi0JCQkgKiBDYWxjdWxhdGUgdGhlIGFtb3Vu
dCB0byB0cmFuc2Zlci4KLQkJCSAqIE5vdCB0byBleGNlZWQgYSBwYWdlLCB0aGUgRU9GLAotCQkJ
ICogb3IgdGhlIHBhc3NlZCBpbiBuYnl0ZXMuCi0JCQkgKi8KLQkJCXBnb2ZmID0gKHZtX29mZnNl
dF90KShvZmYgJiBQQUdFX01BU0spOwotCQkJaWYgKHVhcC0+bmJ5dGVzKQotCQkJCXJlbSA9ICh1
YXAtPm5ieXRlcyAtIGZzYnl0ZXMgLSBsb29wYnl0ZXMpOwotCQkJZWxzZQotCQkJCXJlbSA9IHZh
LnZhX3NpemUgLQotCQkJCSAgICB1YXAtPm9mZnNldCAtIGZzYnl0ZXMgLSBsb29wYnl0ZXM7Ci0J
CQl4ZnNpemUgPSBvbWluKFBBR0VfU0laRSAtIHBnb2ZmLCByZW0pOwotCQkJeGZzaXplID0gb21p
bihzcGFjZSAtIGxvb3BieXRlcywgeGZzaXplKTsKLQkJCWlmICh4ZnNpemUgPD0gMCkgewotCQkJ
CWRvbmUgPSAxOwkJLyogYWxsIGRhdGEgc2VudCAqLwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQkv
KgotCQkJICogQXR0ZW1wdCB0byBsb29rIHVwIHRoZSBwYWdlLiAgQWxsb2NhdGUKLQkJCSAqIGlm
IG5vdCBmb3VuZCBvciB3YWl0IGFuZCBsb29wIGlmIGJ1c3kuCi0JCQkgKi8KLQkJCXBpbmRleCA9
IE9GRl9UT19JRFgob2ZmKTsKLQkJCVZNX09CSkVDVF9XTE9DSyhvYmopOwotCQkJcGcgPSB2bV9w
YWdlX2dyYWIob2JqLCBwaW5kZXgsIFZNX0FMTE9DX05PQlVTWSB8Ci0JCQkgICAgVk1fQUxMT0Nf
Tk9STUFMIHwgVk1fQUxMT0NfV0lSRUQgfCBWTV9BTExPQ19SRVRSWSk7Ci0KLQkJCS8qCi0JCQkg
KiBDaGVjayBpZiBwYWdlIGlzIHZhbGlkIGZvciB3aGF0IHdlIG5lZWQsCi0JCQkgKiBvdGhlcndp
c2UgaW5pdGlhdGUgSS9PLgotCQkJICogSWYgd2UgYWxyZWFkeSB0dXJuZWQgc29tZSBwYWdlcyBp
bnRvIG1idWZzLAotCQkJICogc2VuZCB0aGVtIG9mZiBiZWZvcmUgd2UgY29tZSBoZXJlIGFnYWlu
IGFuZAotCQkJICogYmxvY2suCi0JCQkgKi8KLQkJCWlmIChwZy0+dmFsaWQgJiYgdm1fcGFnZV9p
c192YWxpZChwZywgcGdvZmYsIHhmc2l6ZSkpCi0JCQkJVk1fT0JKRUNUX1dVTkxPQ0sob2JqKTsK
LQkJCWVsc2UgaWYgKG0gIT0gTlVMTCkKLQkJCQllcnJvciA9IEVBR0FJTjsJLyogc2VuZCB3aGF0
IHdlIGFscmVhZHkgZ290ICovCi0JCQllbHNlIGlmICh1YXAtPmZsYWdzICYgU0ZfTk9ESVNLSU8p
Ci0JCQkJZXJyb3IgPSBFQlVTWTsKLQkJCWVsc2UgewotCQkJCXNzaXplX3QgcmVzaWQ7Ci0JCQkJ
aW50IHJlYWRhaGVhZCA9IHNmcmVhZGFoZWFkICogTUFYQlNJWkU7Ci0KLQkJCQlWTV9PQkpFQ1Rf
V1VOTE9DSyhvYmopOwotCi0JCQkJLyoKLQkJCQkgKiBHZXQgdGhlIHBhZ2UgZnJvbSBiYWNraW5n
IHN0b3JlLgotCQkJCSAqIFhYWE1BQzogQmVjYXVzZSB3ZSBkb24ndCBoYXZlIGZwLT5mX2NyZWQK
LQkJCQkgKiBoZXJlLCB3ZSBwYXNzIGluIE5PQ1JFRC4gIFRoaXMgaXMgcHJvYmFibHkKLQkJCQkg
KiB3cm9uZywgYnV0IGlzIGNvbnNpc3RlbnQgd2l0aCBvdXIgb3JpZ2luYWwKLQkJCQkgKiBpbXBs
ZW1lbnRhdGlvbi4KLQkJCQkgKi8KLQkJCQllcnJvciA9IHZuX3Jkd3IoVUlPX1JFQUQsIHZwLCBO
VUxMLCByZWFkYWhlYWQsCi0JCQkJICAgIHRydW5jX3BhZ2Uob2ZmKSwgVUlPX05PQ09QWSwgSU9f
Tk9ERUxPQ0tFRCB8Ci0JCQkJICAgIElPX1ZNSU8gfCAoKHJlYWRhaGVhZCAvIGJzaXplKSA8PCBJ
T19TRVFTSElGVCksCi0JCQkJICAgIHRkLT50ZF91Y3JlZCwgTk9DUkVELCAmcmVzaWQsIHRkKTsK
LQkJCQlTRlNUQVRfSU5DKHNmX2lvY250KTsKLQkJCQlpZiAoZXJyb3IpCi0JCQkJCVZNX09CSkVD
VF9XTE9DSyhvYmopOwotCQkJfQotCQkJaWYgKGVycm9yKSB7Ci0JCQkJdm1fcGFnZV9sb2NrKHBn
KTsKLQkJCQl2bV9wYWdlX3Vud2lyZShwZywgMCk7Ci0JCQkJLyoKLQkJCQkgKiBTZWUgaWYgYW55
b25lIGVsc2UgbWlnaHQga25vdyBhYm91dAotCQkJCSAqIHRoaXMgcGFnZS4gIElmIG5vdCBhbmQg
aXQgaXMgbm90IHZhbGlkLAotCQkJCSAqIHRoZW4gZnJlZSBpdC4KLQkJCQkgKi8KLQkJCQlpZiAo
cGctPndpcmVfY291bnQgPT0gMCAmJiBwZy0+dmFsaWQgPT0gMCAmJgotCQkJCSAgICAhdm1fcGFn
ZV9idXNpZWQocGcpKQotCQkJCQl2bV9wYWdlX2ZyZWUocGcpOwotCQkJCXZtX3BhZ2VfdW5sb2Nr
KHBnKTsKLQkJCQlWTV9PQkpFQ1RfV1VOTE9DSyhvYmopOwotCQkJCWlmIChlcnJvciA9PSBFQUdB
SU4pCi0JCQkJCWVycm9yID0gMDsJLyogbm90IGEgcmVhbCBlcnJvciAqLwotCQkJCWJyZWFrOwot
CQkJfQotCi0JCQkvKgotCQkJICogR2V0IGEgc2VuZGZpbGUgYnVmLiAgV2hlbiBhbGxvY2F0aW5n
IHRoZQotCQkJICogZmlyc3QgYnVmZmVyIGZvciBtYnVmIGNoYWluLCB3ZSB1c3VhbGx5Ci0JCQkg
KiB3YWl0IGFzIGxvbmcgYXMgbmVjZXNzYXJ5LCBidXQgdGhpcyB3YWl0Ci0JCQkgKiBjYW4gYmUg
aW50ZXJydXB0ZWQuICBGb3IgY29uc2VxdWVudAotCQkJICogYnVmZmVycywgZG8gbm90IHNsZWVw
LCBzaW5jZSBzZXZlcmFsCi0JCQkgKiB0aHJlYWRzIG1pZ2h0IGV4aGF1c3QgdGhlIGJ1ZmZlcnMg
YW5kIHRoZW4KLQkJCSAqIGRlYWRsb2NrLgotCQkJICovCi0JCQlzZiA9IHNmX2J1Zl9hbGxvYyhw
ZywgKG1udyB8fCBtICE9IE5VTEwpID8gU0ZCX05PV0FJVCA6Ci0JCQkgICAgU0ZCX0NBVENIKTsK
LQkJCWlmIChzZiA9PSBOVUxMKSB7Ci0JCQkJU0ZTVEFUX0lOQyhzZl9hbGxvY2ZhaWwpOwotCQkJ
CXZtX3BhZ2VfbG9jayhwZyk7Ci0JCQkJdm1fcGFnZV91bndpcmUocGcsIDApOwotCQkJCUtBU1NF
UlQocGctPm9iamVjdCAhPSBOVUxMLAotCQkJCSAgICAoImtlcm5fc2VuZGZpbGU6IG9iamVjdCBk
aXNhcHBlYXJlZCIpKTsKLQkJCQl2bV9wYWdlX3VubG9jayhwZyk7Ci0JCQkJaWYgKG0gPT0gTlVM
TCkKLQkJCQkJZXJyb3IgPSAobW53ID8gRUFHQUlOIDogRUlOVFIpOwotCQkJCWJyZWFrOwotCQkJ
fQotCi0JCQkvKgotCQkJICogR2V0IGFuIG1idWYgYW5kIHNldCBpdCB1cCBhcyBoYXZpbmcKLQkJ
CSAqIGV4dGVybmFsIHN0b3JhZ2UuCi0JCQkgKi8KLQkJCW0wID0gbV9nZXQoKG1udyA/IE1fTk9X
QUlUIDogTV9XQUlUT0spLCBNVF9EQVRBKTsKLQkJCWlmIChtMCA9PSBOVUxMKSB7Ci0JCQkJZXJy
b3IgPSAobW53ID8gRUFHQUlOIDogRU5PQlVGUyk7Ci0JCQkJc2ZfYnVmX21leHQoTlVMTCwgc2Yp
OwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKG1fZXh0YWRkKG0wLCAoY2FkZHJfdCApc2ZfYnVm
X2t2YShzZiksIFBBR0VfU0laRSwKLQkJCSAgICBzZl9idWZfbWV4dCwgc2ZzLCBzZiwgTV9SRE9O
TFksIEVYVF9TRkJVRiwKLQkJCSAgICAobW53ID8gTV9OT1dBSVQgOiBNX1dBSVRPSykpICE9IDAp
IHsKLQkJCQllcnJvciA9IChtbncgPyBFQUdBSU4gOiBFTk9CVUZTKTsKLQkJCQlzZl9idWZfbWV4
dChOVUxMLCBzZik7Ci0JCQkJbV9mcmVlbShtMCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQltMC0+
bV9kYXRhID0gKGNoYXIgKilzZl9idWZfa3ZhKHNmKSArIHBnb2ZmOwotCQkJbTAtPm1fbGVuID0g
eGZzaXplOwotCi0JCQkvKiBBcHBlbmQgdG8gbWJ1ZiBjaGFpbi4gKi8KLQkJCWlmIChtdGFpbCAh
PSBOVUxMKQotCQkJCW10YWlsLT5tX25leHQgPSBtMDsKLQkJCWVsc2UgaWYgKG0gIT0gTlVMTCkK
LQkJCQltX2xhc3QobSktPm1fbmV4dCA9IG0wOwotCQkJZWxzZQotCQkJCW0gPSBtMDsKLQkJCW10
YWlsID0gbTA7Ci0KLQkJCS8qIEtlZXAgdHJhY2sgb2YgYml0cyBwcm9jZXNzZWQuICovCi0JCQls
b29wYnl0ZXMgKz0geGZzaXplOwotCQkJb2ZmICs9IHhmc2l6ZTsKLQotCQkJaWYgKHNmcyAhPSBO
VUxMKSB7Ci0JCQkJbXR4X2xvY2soJnNmcy0+bXR4KTsKLQkJCQlzZnMtPmNvdW50Kys7Ci0JCQkJ
bXR4X3VubG9jaygmc2ZzLT5tdHgpOwotCQkJfQotCQl9CisJCS8qIENhbGwga2Vybl9zZW5kZmls
ZV9tYnVmKCkgZm9yIHRoZSBpbm5lciBsb29wLiAqLworCQlpZiAodWFwLT5uYnl0ZXMpCisJCQly
ZW0gPSAodWFwLT5uYnl0ZXMgLSBmc2J5dGVzKTsKKwkJZWxzZQorCQkJcmVtID0gdmEudmFfc2l6
ZSAtCisJCQkgICAgdWFwLT5vZmZzZXQgLSBmc2J5dGVzOworCQllcnJvciA9IGtlcm5fc2VuZGZp
bGVfbWJ1Zih2cCwgb2JqLCAmbSwgJm10YWlsLCBvZmYsICZyZW0sCisJCSAgICBic2l6ZSwgJmRv
bmUsIHNwYWNlLCBtbncsIDAsIHVhcC0+ZmxhZ3MsCisJCSAgICBJT19OT0RFTE9DS0VEIHwgSU9f
Vk1JTywgc2ZzLCBOT0NSRUQsIHRkKTsKIAogCQlWT1BfVU5MT0NLKHZwLCAwKTsKIAotLS0gZnMv
bmZzc2VydmVyL25mc19uZnNkcG9ydC5jLnNhdjMJMjAxNC0wMi0wNiAxODo0MjowMi4wMDAwMDAw
MDAgLTA1MDAKKysrIGZzL25mc3NlcnZlci9uZnNfbmZzZHBvcnQuYwkyMDE0LTAyLTA2IDE4OjI2
OjQ5LjAwMDAwMDAwMCAtMDUwMApAQCAtNzQsNiArNzQsOCBAQCBzdGF0aWMgdWludDMyX3QgbmZz
djRfc3lzaWQgPSAwOwogCiBzdGF0aWMgaW50IG5mc3N2Y19zcnZjYWxsKHN0cnVjdCB0aHJlYWQg
Kiwgc3RydWN0IG5mc3N2Y19hcmdzICosCiAgICAgc3RydWN0IHVjcmVkICopOworc3RhdGljIGlu
dCBuZnNydl9maWxlX21idWYoc3RydWN0IHZub2RlICosIHN0cnVjdCBuZnN2YXR0ciAqLCBvZmZf
dCwKKyAgICBpbnQsIHN0cnVjdCBtYnVmICoqLCBzdHJ1Y3QgbWJ1ZiAqKiwgc3RydWN0IHVjcmVk
ICosIHN0cnVjdCB0aHJlYWQgKik7CiAKIGludCBuZnNydl9lbmFibGVfY3Jvc3NtbnRwdCA9IDE7
CiBzdGF0aWMgaW50IG5mc19jb21taXRfYmxrczsKQEAgLTYxNyw4ICs2MTksOSBAQCBvdXQ6CiAg
KiBSZWFkIHZub2RlIG9wIGNhbGwgaW50byBtYnVmIGxpc3QuCiAgKi8KIGludAotbmZzdm5vX3Jl
YWQoc3RydWN0IHZub2RlICp2cCwgb2ZmX3Qgb2ZmLCBpbnQgY250LCBzdHJ1Y3QgdWNyZWQgKmNy
ZWQsCi0gICAgc3RydWN0IHRocmVhZCAqcCwgc3RydWN0IG1idWYgKiptcHAsIHN0cnVjdCBtYnVm
ICoqbXBlbmRwKQorbmZzdm5vX3JlYWQoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IG5mc3ZhdHRy
ICpudmFwLCBvZmZfdCBvZmYsIGludCBjbnQsCisgICAgc3RydWN0IHVjcmVkICpjcmVkLCBzdHJ1
Y3QgdGhyZWFkICpwLCBzdHJ1Y3QgbWJ1ZiAqKm1wcCwKKyAgICBzdHJ1Y3QgbWJ1ZiAqKm1wZW5k
cCkKIHsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKIAlpbnQgaTsKQEAgLTYyOSw2ICs2MzIsOSBAQCBuZnN2
bm9fcmVhZChzdHJ1Y3Qgdm5vZGUgKnZwLCBvZmZfdCBvZmYsCiAJc3RydWN0IHVpbyBpbywgKnVp
b3AgPSAmaW87CiAJc3RydWN0IG5mc2hldXIgKm5oOwogCisJZXJyb3IgPSBuZnNydl9maWxlX21i
dWYodnAsIG52YXAsIG9mZiwgY250LCBtcHAsIG1wZW5kcCwgY3JlZCwgcCk7CisJaWYgKGVycm9y
ID09IDApCisJCWdvdG8gb3V0OwogCWxlbiA9IGxlZnQgPSBORlNNX1JORFVQKGNudCk7CiAJbTMg
PSBOVUxMOwogCS8qCkBAIC0zMjk1LDYgKzMzMDEsOTggQEAgbmZzcnZfYmFja3Vwc3RhYmxlKHZv
aWQpCiAJfQogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIGtlcm5fc2VuZGZpbGVfbWJ1
ZigpIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBtYnVmcworICogdGhhdCBjYW4gYmUgdXNlZCBieSB0
aGUgTkZTIHNlcnZlciByZWFkIHJlcGx5LgorICovCitpbnQKK25mc3J2X2ZpbGVfbWJ1ZihzdHJ1
Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgbmZzdmF0dHIgKm52YXAsIG9mZl90IG9mZiwKKyAgICBpbnQg
bmJ5dGVzLCBzdHJ1Y3QgbWJ1ZiAqKm1wLCBzdHJ1Y3QgbWJ1ZiAqKm1lbmRwLCBzdHJ1Y3QgdWNy
ZWQgKmFjcmVkLAorICAgIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCXN0cnVjdCB2bV9vYmplY3Qg
Km9iaiA9IE5VTEw7CisJc3RydWN0IG1idWYgKm0sICptMjsKKwlvZmZfdCByZW07CisJaW50IGJz
aXplLCBjbnQsIGRvbmUsIGVycm9yLCBpOworCWNoYXIgKmNwOworCisJKm1wID0gTlVMTDsKKwkq
bWVuZHAgPSBOVUxMOworCWVycm9yID0gMDsKKwlic2l6ZSA9IHZwLT52X21vdW50LT5tbnRfc3Rh
dC5mX2lvc2l6ZTsKKwlpZiAobnZhcC0+bmFfc2l6ZSA+IG9mZikKKwkJcmVtID0gbnZhcC0+bmFf
c2l6ZSAtIG9mZjsKKwllbHNlCisJCWdvdG8gb3V0OwkvKiBOb3RoaW5nIHRvIHJlYWQsIHNvIHdl
IGFyZSBkb25lLiAqLworCXJlbSA9IG9taW4ocmVtLCBuYnl0ZXMpOworCWNudCA9IHJlbTsKKwlj
bnQgPSBORlNNX1JORFVQKGNudCkgLSBjbnQ7CS8qIENudCBvZiBieXRlcyBvZiB0cmFpbGluZyAw
cy4gKi8KKwlvYmogPSB2cC0+dl9vYmplY3Q7CisJaWYgKG9iaiAhPSBOVUxMKSB7CisJCS8qCisJ
CSAqIERvIHdlIG5lZWQgdG8gYWNxdWlyZSBhIHJlZmVyZW5jZSBjbnQgb24gdGhlIG9iaiBsaWtl
CisJCSAqIGtlcm5fc2VuZGZpbGUoKSBkb2VzLCBldmVuIGlmIHdlIG5ldmVyIHVubG9jayB2cD8K
KwkJICovCisJCVZNX09CSkVDVF9XTE9DSyhvYmopOworCQlpZiAoKG9iai0+ZmxhZ3MgJiBPQkpf
REVBRCkgPT0gMCkgeworI2lmZGVmIG5vdG5vdworCQkJdm1fb2JqZWN0X3JlZmVyZW5jZV9sb2Nr
ZWQob2JqKTsKKyNlbmRpZgorCQkJVk1fT0JKRUNUX1dVTkxPQ0sob2JqKTsKKwkJfSBlbHNlIHsK
KwkJCVZNX09CSkVDVF9XVU5MT0NLKG9iaik7CisJCQlvYmogPSBOVUxMOworCQl9CisJfQorCWlm
IChvYmogPT0gTlVMTCkKKwkJZXJyb3IgPSBFSU5WQUw7CisKKwkvKiBTZXR1cCB0aGUgYXJncyBm
b3Iga2Vybl9zZW5kZmlsZV9tYnVmKCkuICovCisJZG9uZSA9IDA7CisJaWYgKGVycm9yID09IDAp
CisJCWVycm9yID0ga2Vybl9zZW5kZmlsZV9tYnVmKHZwLCBvYmosIG1wLCBtZW5kcCwgb2ZmLCAm
cmVtLCBic2l6ZSwKKwkJICAgICZkb25lLCAyICogTUFYQlNJWkUsIDAsIDEsIDAsIElPX05PREVM
T0NLRUQgfCBJT19WTUlPIHwKKwkJICAgIElPX05PTUFDQ0hFQ0ssIE5VTEwsIGFjcmVkLCB0ZCk7
CisJaWYgKGVycm9yID09IDAgJiYgY250ID4gMCkgeworCQkvKgorCQkgKiBTdW4gWERSIHJlcXVp
cmVzIHRoYXQgZGF0YSBiZSBmaWxsZWQgdG8gYSBtdWx0aXBsZQorCQkgKiBvZiA0IGJ5dGVzIHdp
dGggMCBieXRlcy4KKwkJICogU2luY2UgdGhlIGxpc3Qgb2YgbWJ1ZnMgcmV0dXJuZWQgYnkga2Vy
bl9zZW5kZmlsZV9tYnVmCisJCSAqIHJlZmVyZW5jZSBwYWdlcyBmb3IgYSBmaWxlIGFuZCBjYW4n
dCBiZSBtb2RpZmllZCwgdGhpcworCQkgKiByZXF1aXJlcyBhbiBhZGRpdGlvbmFsIG1idWYuCisJ
CSAqLworCQltID0gKm1lbmRwOworCQlORlNNR0VUKG0yKTsKKwkJbS0+bV9uZXh0ID0gbTI7CisJ
CSptZW5kcCA9IG0yOworCQljcCA9IG10b2QobTIsIGNoYXIgKik7CisJCW0yLT5tX2xlbiA9IGNu
dDsKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQkJKmNwKysgPSAnXDAnOworCX0KKwlp
ZiAoZXJyb3IgPT0gRVJFU1RBUlQpCisJCXBhbmljKCJuZnNydl9maWxlX21idWY6IEVSRVNUQVJU
Iik7CitvdXQ6CisjaWZkZWYgbm90bm93CisJaWYgKG9iaiAhPSBOVUxMKSB7CisJCU5GU1ZPUFVO
TE9DSyh2cCwgMCk7CisJCXZtX29iamVjdF9kZWFsbG9jYXRlKG9iaik7CisJCU5GU1ZPUExPQ0so
dnAsIExLX1NIQVJFRCB8IExLX1JFVFJZKTsKKwkJaWYgKGVycm9yID09IDAgJiYgKHZwLT52X2lm
bGFnICYgVklfRE9PTUVEKSAhPSAwKQorCQkJZXJyb3IgPSBFU1RBTEU7CisJfQorI2VuZGlmCisJ
aWYgKGVycm9yICE9IDApIHsKKwkJaWYgKCptcCAhPSBOVUxMKSB7CisJCQltX2ZyZWVtKCptcCk7
CisJCQkqbXAgPSBOVUxMOworCQkJKm1lbmRwID0gTlVMTDsKKwkJfQorcHJpbnRmKCJlbyBuZnNy
dl9maWxlX21idWYgZXJyPSVkXG4iLCBlcnJvcik7CisJfQorCXJldHVybiAoZXJyb3IpOworfQor
CiBleHRlcm4gaW50ICgqbmZzZF9jYWxsX25mc2QpKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IG5m
c3N2Y19hcmdzICopOwogCiAvKgotLS0gZnMvbmZzc2VydmVyL25mc19uZnNkc2Vydi5jLnNhdjMJ
MjAxNC0wMi0wNSAyMTozNToxNi4wMDAwMDAwMDAgLTA1MDAKKysrIGZzL25mc3NlcnZlci9uZnNf
bmZzZHNlcnYuYwkyMDE0LTAyLTA1IDIxOjM1OjQ1LjAwMDAwMDAwMCAtMDUwMApAQCAtNzI2LDcg
KzcyNiw3IEBAIG5mc3J2ZF9yZWFkKHN0cnVjdCBuZnNydl9kZXNjcmlwdCAqbmQsIF8KIAkJY250
ID0gcmVxbGVuOwogCW0zID0gTlVMTDsKIAlpZiAoY250ID4gMCkgewotCQluZC0+bmRfcmVwc3Rh
dCA9IG5mc3Zub19yZWFkKHZwLCBvZmYsIGNudCwgbmQtPm5kX2NyZWQsIHAsCisJCW5kLT5uZF9y
ZXBzdGF0ID0gbmZzdm5vX3JlYWQodnAsICZudmEsIG9mZiwgY250LCBuZC0+bmRfY3JlZCwgcCwK
IAkJICAgICZtMywgJm0yKTsKIAkJaWYgKCEobmQtPm5kX2ZsYWcgJiBORF9ORlNWNCkpIHsKIAkJ
CWdldHJldCA9IG5mc3Zub19nZXRhdHRyKHZwLCAmbnZhLCBuZC0+bmRfY3JlZCwgcCwgMSk7Ci0t
LSBmcy9uZnMvbmZzX3Zhci5oLnNhdjMJMjAxNC0wMi0wNSAyMjoxNDozOC4wMDAwMDAwMDAgLTA1
MDAKKysrIGZzL25mcy9uZnNfdmFyLmgJMjAxNC0wMi0wNSAyMjoxNzoyOS4wMDAwMDAwMDAgLTA1
MDAKQEAgLTU3OSw4ICs1NzksOCBAQCB2b2lkIG5mc3Zub19zZXRwYXRoYnVmKHN0cnVjdCBuYW1l
aWRhdGEgCiB2b2lkIG5mc3Zub19yZWxwYXRoYnVmKHN0cnVjdCBuYW1laWRhdGEgKik7CiBpbnQg
bmZzdm5vX3JlYWRsaW5rKHZub2RlX3QsIHN0cnVjdCB1Y3JlZCAqLCBORlNQUk9DX1QgKiwgbWJ1
Zl90ICosCiAgICAgbWJ1Zl90ICosIGludCAqKTsKLWludCBuZnN2bm9fcmVhZCh2bm9kZV90LCBv
ZmZfdCwgaW50LCBzdHJ1Y3QgdWNyZWQgKiwgTkZTUFJPQ19UICosCi0gICAgbWJ1Zl90ICosIG1i
dWZfdCAqKTsKK2ludCBuZnN2bm9fcmVhZCh2bm9kZV90LCBzdHJ1Y3QgbmZzdmF0dHIgKiwgb2Zm
X3QsIGludCwgc3RydWN0IHVjcmVkICosCisgICAgTkZTUFJPQ19UICosIG1idWZfdCAqLCBtYnVm
X3QgKik7CiBpbnQgbmZzdm5vX3dyaXRlKHZub2RlX3QsIG9mZl90LCBpbnQsIGludCwgaW50LCBt
YnVmX3QsCiAgICAgY2hhciAqLCBzdHJ1Y3QgdWNyZWQgKiwgTkZTUFJPQ19UICopOwogaW50IG5m
c3Zub19jcmVhdGVzdWIoc3RydWN0IG5mc3J2X2Rlc2NyaXB0ICosIHN0cnVjdCBuYW1laWRhdGEg
KiwKLS0tIHN5cy9zeXNjYWxsc3Vici5oLnNhdjMJMjAxNC0wMi0wNCAyMDozMDo0NC4wMDAwMDAw
MDAgLTA1MDAKKysrIHN5cy9zeXNjYWxsc3Vici5oCTIwMTQtMDItMDYgMTg6MjQ6NDguMDAwMDAw
MDAwIC0wNTAwCkBAIC0yNTMsNiArMjUzLDExIEBAIGludAlrZXJuX3dhaXQ2KHN0cnVjdCB0aHJl
YWQgKnRkLCBlbnVtIGkKIGludAlrZXJuX3dyaXRldihzdHJ1Y3QgdGhyZWFkICp0ZCwgaW50IGZk
LCBzdHJ1Y3QgdWlvICphdWlvKTsKIGludAlrZXJuX3NvY2tldHBhaXIoc3RydWN0IHRocmVhZCAq
dGQsIGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsCiAJICAgIGludCAqcnN2KTsK
K2ludAlrZXJuX3NlbmRmaWxlX21idWYoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHZtX29iamVj
dCAqb2JqLAorCSAgICBzdHJ1Y3QgbWJ1ZiAqKm1wLCBzdHJ1Y3QgbWJ1ZiAqKm10YWlscCwgb2Zm
X3Qgb2ZmLCBvZmZfdCAqcmVtcCwKKwkgICAgaW50IGJzaXplLCBpbnQgKmRvbmVwLCBpbnQgc3Bh
Y2UsIGludCBtbncsIGludCB3YWl0X2ZvcmFsbCwKKwkgICAgaW50IGZsYWdzLCBpbnQgaW9mbGFn
cywgdm9pZCAqc2ZzLCBzdHJ1Y3QgdWNyZWQgKmFjcmVkLAorCSAgICBzdHJ1Y3QgdGhyZWFkICp0
ZCk7CiAKIC8qIGZsYWdzIGZvciBrZXJuX3NpZ2FjdGlvbiAqLwogI2RlZmluZQlLU0FfT1NJR1NF
VAkweDAwMDEJLyogdXNlcyBvc2lnYWN0X3QgKi8K
------=_Part_1982991_1248016500.1391738315025--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1261040377.1982994.1391738315028.JavaMail.root>