From owner-freebsd-stable@FreeBSD.ORG Sat Nov 19 00:36:48 2011 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EBB5D106564A; Sat, 19 Nov 2011 00:36:48 +0000 (UTC) (envelope-from delphij@gmail.com) Received: from mail-yx0-f182.google.com (mail-yx0-f182.google.com [209.85.213.182]) by mx1.freebsd.org (Postfix) with ESMTP id 5EF0E8FC08; Sat, 19 Nov 2011 00:36:48 +0000 (UTC) Received: by yenl11 with SMTP id l11so4514975yen.13 for ; Fri, 18 Nov 2011 16:36:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=qDs+A311AtrBYVMZZPs3TFv6gFrX36qjVFmwRFx8q2E=; b=Si9IeAaMSc4+636zEqdwIdwgD/OMT6sTBvwabCdJ1OOfAgrMEWpt7TZYClXIW58a59 uF8eqn9r3NAL+bSaLl5FUwLZNq9f9BiZwIX9IXedKK1ups1xdQPI957XDG74YlS41NUc E+tq4OCFHFhVitzarbKnoO8d2yGfjwAdAUVEU= MIME-Version: 1.0 Received: by 10.182.41.69 with SMTP id d5mr1192201obl.47.1321663007585; Fri, 18 Nov 2011 16:36:47 -0800 (PST) Received: by 10.182.192.99 with HTTP; Fri, 18 Nov 2011 16:36:47 -0800 (PST) In-Reply-To: <201111180814.42656.jhb@freebsd.org> References: <201111180310.pAI3ARbZ075115@mippet.ci.com.au> <201111180814.42656.jhb@freebsd.org> Date: Fri, 18 Nov 2011 16:36:47 -0800 Message-ID: From: Xin LI To: John Baldwin Content-Type: multipart/mixed; boundary=f46d0444e96b14738804b20ba655 Cc: freebsd-stable@freebsd.org, Daryl Sayers Subject: Re: Low nfs write throughput X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2011 00:36:49 -0000 --f46d0444e96b14738804b20ba655 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, > I don't know if it will help with your performance, but I have some patch= es > to allow the NFS server to cluster writes. =C2=A0You can try > www.freebsd.org/~jhb/patches/nfs_server_cluster.patch. =C2=A0I've tested = it on 8, > but it should probably apply fine to 9. I think 9 would need some changes, I just made them with minimal compile testing, though. Cheers, --=20 Xin LI https://www.delphij.net/ FreeBSD - The Power to Serve! Live free or die --f46d0444e96b14738804b20ba655 Content-Type: text/x-patch; charset=US-ASCII; name="nfs-cluster.diff" Content-Disposition: attachment; filename="nfs-cluster.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gv5vzwo30 SW5kZXg6IHN5cy9mcy9uZnNzZXJ2ZXIvbmZzX25mc2Rwb3J0LmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz L2ZzL25mc3NlcnZlci9uZnNfbmZzZHBvcnQuYwkocmV2aXNpb24gMjI3Njg5KQorKysgc3lzL2Zz L25mc3NlcnZlci9uZnNfbmZzZHBvcnQuYwkod29ya2luZyBjb3B5KQpAQCAtOTAsMjAgKzkwLDc4 IEBAIFNZU0NUTF9JTlQoX3Zmc19uZnNkLCBPSURfQVVUTywgaXNzdWVfZGVsZWdhdGlvbnMsCiBT WVNDVExfSU5UKF92ZnNfbmZzZCwgT0lEX0FVVE8sIGVuYWJsZV9sb2NhbGxvY2tzLCBDVExGTEFH X1JXLAogICAgICZuZnNydl9kb2xvY2FsbG9ja3MsIDAsICJFbmFibGUgbmZzZCB0byBhY3F1aXJl IGxvY2FsIGxvY2tzIG9uIGZpbGVzIik7CiAKLSNkZWZpbmUJTlVNX0hFVVJJU1RJQwkJMTAxNwor I2RlZmluZQlNQVhfUkVPUkRFUkVEX1JQQwkxNgorI2RlZmluZQlOVU1fSEVVUklTVElDCQkxMDMx CiAjZGVmaW5lCU5IVVNFX0lOSVQJCTY0CiAjZGVmaW5lCU5IVVNFX0lOQwkJMTYKICNkZWZpbmUJ TkhVU0VfTUFYCQkyMDQ4CiAKIHN0YXRpYyBzdHJ1Y3QgbmZzaGV1ciB7CiAJc3RydWN0IHZub2Rl ICpuaF92cDsJLyogdnAgdG8gbWF0Y2ggKHVucmVmZXJlbmNlZCBwb2ludGVyKSAqLwotCW9mZl90 IG5oX25leHRyOwkJLyogbmV4dCBvZmZzZXQgZm9yIHNlcXVlbnRpYWwgZGV0ZWN0aW9uICovCisJ b2ZmX3QgbmhfbmV4dG9mZjsJLyogbmV4dCBvZmZzZXQgZm9yIHNlcXVlbnRpYWwgZGV0ZWN0aW9u ICovCiAJaW50IG5oX3VzZTsJCS8qIHVzZSBjb3VudCBmb3Igc2VsZWN0aW9uICovCiAJaW50IG5o X3NlcWNvdW50OwkvKiBoZXVyaXN0aWMgKi8KIH0gbmZzaGV1cltOVU1fSEVVUklTVElDXTsKIAog CiAvKgorICogSGV1cmlzdGljIHRvIGRldGVjdCBzZXF1ZW50aWFsIG9wZXJhdGlvbi4KKyAqLwor c3RhdGljIHN0cnVjdCBuZnNoZXVyICoKK25mc3J2X3NlcXVlbnRpYWxfaGV1cmlzdGljKHN0cnVj dCB1aW8gKnVpbywgc3RydWN0IHZub2RlICp2cCkKK3sKKwlzdHJ1Y3QgbmZzaGV1ciAqbmg7CisJ aW50IGhpLCB0cnk7CisKKwkvKiBMb2NhdGUgYmVzdCBjYW5kaWRhdGUuICovCisJdHJ5ID0gMzI7 CisJaGkgPSAoKGludCkodm1fb2Zmc2V0X3QpdnAgLyBzaXplb2Yoc3RydWN0IHZub2RlKSkgJSBO VU1fSEVVUklTVElDOworCW5oID0gJm5mc2hldXJbaGldOworCXdoaWxlICh0cnktLSkgeworCQlp ZiAobmZzaGV1cltoaV0ubmhfdnAgPT0gdnApIHsKKwkJCW5oID0gJm5mc2hldXJbaGldOworCQkJ YnJlYWs7CisJCX0KKwkJaWYgKG5mc2hldXJbaGldLm5oX3VzZSA+IDApCisJCQktLW5mc2hldXJb aGldLm5oX3VzZTsKKwkJaGkgPSAoaGkgKyAxKSAlIE5VTV9IRVVSSVNUSUM7CisJCWlmIChuZnNo ZXVyW2hpXS5uaF91c2UgPCBuaC0+bmhfdXNlKQorCQkJbmggPSAmbmZzaGV1cltoaV07CisJfQor CisJLyogSW5pdGlhbGl6ZSBoaW50IGlmIHRoaXMgaXMgYSBuZXcgZmlsZS4gKi8KKwlpZiAobmgt Pm5oX3ZwICE9IHZwKSB7CisJCW5oLT5uaF92cCA9IHZwOworCQluaC0+bmhfbmV4dG9mZiA9IHVp by0+dWlvX29mZnNldDsKKwkJbmgtPm5oX3VzZSA9IE5IVVNFX0lOSVQ7CisJCWlmICh1aW8tPnVp b19vZmZzZXQgPT0gMCkKKwkJCW5oLT5uaF9zZXFjb3VudCA9IDQ7CisJCWVsc2UKKwkJCW5oLT5u aF9zZXFjb3VudCA9IDE7CisJfQorCisJLyogQ2FsY3VsYXRlIGhldXJpc3RpYy4gKi8KKwlpZiAo KHVpby0+dWlvX29mZnNldCA9PSAwICYmIG5oLT5uaF9zZXFjb3VudCA+IDApIHx8CisJICAgIHVp by0+dWlvX29mZnNldCA9PSBuaC0+bmhfbmV4dG9mZikgeworCQkvKiBTZWUgY29tbWVudHMgaW4g dmZzX3Zub3BzLmM6c2VxdWVudGlhbF9oZXVyaXN0aWMoKS4gKi8KKwkJbmgtPm5oX3NlcWNvdW50 ICs9IGhvd21hbnkodWlvLT51aW9fcmVzaWQsIDE2Mzg0KTsKKwkJaWYgKG5oLT5uaF9zZXFjb3Vu dCA+IElPX1NFUU1BWCkKKwkJCW5oLT5uaF9zZXFjb3VudCA9IElPX1NFUU1BWDsKKwl9IGVsc2Ug aWYgKHFhYnModWlvLT51aW9fb2Zmc2V0IC0gbmgtPm5oX25leHRvZmYpIDw9IE1BWF9SRU9SREVS RURfUlBDICoKKwkgICAgaW1heCh2cC0+dl9tb3VudC0+bW50X3N0YXQuZl9pb3NpemUsIHVpby0+ dWlvX3Jlc2lkKSkgeworCQkvKiBQcm9iYWJseSBhIHJlb3JkZXJlZCBSUEMsIGxlYXZlIHNlcWNv dW50IGFsb25lLiAqLworCX0gZWxzZSBpZiAobmgtPm5oX3NlcWNvdW50ID4gMSkgeworCQluaC0+ bmhfc2VxY291bnQgLz0gMjsKKwl9IGVsc2UgeworCQluaC0+bmhfc2VxY291bnQgPSAwOworCX0K KwluaC0+bmhfdXNlICs9IE5IVVNFX0lOQzsKKwlpZiAobmgtPm5oX3VzZSA+IE5IVVNFX01BWCkK KwkJbmgtPm5oX3VzZSA9IE5IVVNFX01BWDsKKwlyZXR1cm4gKG5oKTsKK30KKworLyoKICAqIEdl dCBhdHRyaWJ1dGVzIGludG8gbmZzdmF0dHIgc3RydWN0dXJlLgogICovCiBpbnQKQEAgLTU2Nyw1 OCArNjI1LDEyIEBAIG5mc3Zub19yZWFkKHN0cnVjdCB2bm9kZSAqdnAsIG9mZl90IG9mZiwgaW50 IGNudCwKIAlpbnQgaTsKIAlzdHJ1Y3QgaW92ZWMgKml2OwogCXN0cnVjdCBpb3ZlYyAqaXYyOwot CWludCBlcnJvciA9IDAsIGxlbiwgbGVmdCwgc2l6LCB0bGVuLCBpb2ZsYWcgPSAwLCBoaSwgdHJ5 ID0gMzI7CisJaW50IGVycm9yID0gMCwgbGVuLCBsZWZ0LCBzaXosIHRsZW4sIGlvZmxhZyA9IDA7 CiAJc3RydWN0IG1idWYgKm0yID0gTlVMTCwgKm0zOwogCXN0cnVjdCB1aW8gaW8sICp1aW9wID0g JmlvOwogCXN0cnVjdCBuZnNoZXVyICpuaDsKIAotCS8qCi0JICogQ2FsY3VsYXRlIHNlcWNvdW50 IGZvciBoZXVyaXN0aWMKLQkgKi8KLQkvKgotCSAqIExvY2F0ZSBiZXN0IGNhbmRpZGF0ZQotCSAq LwotCi0JaGkgPSAoKGludCkodm1fb2Zmc2V0X3QpdnAgLyBzaXplb2Yoc3RydWN0IHZub2RlKSkg JSBOVU1fSEVVUklTVElDOwotCW5oID0gJm5mc2hldXJbaGldOwotCi0Jd2hpbGUgKHRyeS0tKSB7 Ci0JCWlmIChuZnNoZXVyW2hpXS5uaF92cCA9PSB2cCkgewotCQkJbmggPSAmbmZzaGV1cltoaV07 Ci0JCQlicmVhazsKLQkJfQotCQlpZiAobmZzaGV1cltoaV0ubmhfdXNlID4gMCkKLQkJCS0tbmZz aGV1cltoaV0ubmhfdXNlOwotCQloaSA9IChoaSArIDEpICUgTlVNX0hFVVJJU1RJQzsKLQkJaWYg KG5mc2hldXJbaGldLm5oX3VzZSA8IG5oLT5uaF91c2UpCi0JCQluaCA9ICZuZnNoZXVyW2hpXTsK LQl9Ci0KLQlpZiAobmgtPm5oX3ZwICE9IHZwKSB7Ci0JCW5oLT5uaF92cCA9IHZwOwotCQluaC0+ bmhfbmV4dHIgPSBvZmY7Ci0JCW5oLT5uaF91c2UgPSBOSFVTRV9JTklUOwotCQlpZiAob2ZmID09 IDApCi0JCQluaC0+bmhfc2VxY291bnQgPSA0OwotCQllbHNlCi0JCQluaC0+bmhfc2VxY291bnQg PSAxOwotCX0KLQotCS8qCi0JICogQ2FsY3VsYXRlIGhldXJpc3RpYwotCSAqLwotCi0JaWYgKChv ZmYgPT0gMCAmJiBuaC0+bmhfc2VxY291bnQgPiAwKSB8fCBvZmYgPT0gbmgtPm5oX25leHRyKSB7 Ci0JCWlmICgrK25oLT5uaF9zZXFjb3VudCA+IElPX1NFUU1BWCkKLQkJCW5oLT5uaF9zZXFjb3Vu dCA9IElPX1NFUU1BWDsKLQl9IGVsc2UgaWYgKG5oLT5uaF9zZXFjb3VudCA+IDEpIHsKLQkJbmgt Pm5oX3NlcWNvdW50ID0gMTsKLQl9IGVsc2UgewotCQluaC0+bmhfc2VxY291bnQgPSAwOwotCX0K LQluaC0+bmhfdXNlICs9IE5IVVNFX0lOQzsKLQlpZiAobmgtPm5oX3VzZSA+IE5IVVNFX01BWCkK LQkJbmgtPm5oX3VzZSA9IE5IVVNFX01BWDsKKwluaCA9IG5mc3J2X3NlcXVlbnRpYWxfaGV1cmlz dGljKHVpb3AsIHZwKTsKIAlpb2ZsYWcgfD0gbmgtPm5oX3NlcWNvdW50IDw8IElPX1NFUVNISUZU OwogCiAJbGVuID0gbGVmdCA9IE5GU01fUk5EVVAoY250KTsKQEAgLTY3Miw2ICs2ODQsNyBAQCBu ZnN2bm9fcmVhZChzdHJ1Y3Qgdm5vZGUgKnZwLCBvZmZfdCBvZmYsIGludCBjbnQsCiAJCSptcHAg PSBOVUxMOwogCQlnb3RvIG91dDsKIAl9CisJbmgtPm5oX25leHRvZmYgPSB1aW9wLT51aW9fb2Zm c2V0OwogCXRsZW4gPSBsZW4gLSB1aW9wLT51aW9fcmVzaWQ7CiAJY250ID0gY250IDwgdGxlbiA/ IGNudCA6IHRsZW47CiAJdGxlbiA9IE5GU01fUk5EVVAoY250KTsKQEAgLTcwMCw2ICs3MTMsNyBA QCBuZnN2bm9fd3JpdGUoc3RydWN0IHZub2RlICp2cCwgb2ZmX3Qgb2ZmLCBpbnQgcmV0bAogCXN0 cnVjdCBpb3ZlYyAqaXY7CiAJaW50IGlvZmxhZ3MsIGVycm9yOwogCXN0cnVjdCB1aW8gaW8sICp1 aW9wID0gJmlvOworCXN0cnVjdCBuZnNoZXVyICpuaDsKIAogCU1BTExPQyhpdnAsIHN0cnVjdCBp b3ZlYyAqLCBjbnQgKiBzaXplb2YgKHN0cnVjdCBpb3ZlYyksIE1fVEVNUCwKIAkgICAgTV9XQUlU T0spOwpAQCAtNzMzLDcgKzc0NywxMSBAQCBuZnN2bm9fd3JpdGUoc3RydWN0IHZub2RlICp2cCwg b2ZmX3Qgb2ZmLCBpbnQgcmV0bAogCXVpb3AtPnVpb19zZWdmbGcgPSBVSU9fU1lTU1BBQ0U7CiAJ TkZTVUlPUFJPQyh1aW9wLCBwKTsKIAl1aW9wLT51aW9fb2Zmc2V0ID0gb2ZmOworCW5oID0gbmZz cnZfc2VxdWVudGlhbF9oZXVyaXN0aWModWlvcCwgdnApOworCWlvZmxhZ3MgfD0gbmgtPm5oX3Nl cWNvdW50IDw8IElPX1NFUVNISUZUOwogCWVycm9yID0gVk9QX1dSSVRFKHZwLCB1aW9wLCBpb2Zs YWdzLCBjcmVkKTsKKwlpZiAoZXJyb3IgPT0gMCkKKwkJbmgtPm5oX25leHRvZmYgPSB1aW9wLT51 aW9fb2Zmc2V0OwogCUZSRUUoKGNhZGRyX3QpaXYsIE1fVEVNUCk7CiAKIAlORlNFWElUQ09ERShl cnJvcik7CkluZGV4OiBzeXMvbmZzc2VydmVyL25mc19zZXJ2LmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz L25mc3NlcnZlci9uZnNfc2Vydi5jCShyZXZpc2lvbiAyMjc2ODkpCisrKyBzeXMvbmZzc2VydmVy L25mc19zZXJ2LmMJKHdvcmtpbmcgY29weSkKQEAgLTEwNywxNCArMTA3LDE1IEBAIEZFQVRVUkUo bmZzc2VydmVyLCAiTkZTIHNlcnZlciIpOwogCiAjZGVmaW5lIE1BWF9DT01NSVRfQ09VTlQJKDEw MjQgKiAxMDI0KQogCi0jZGVmaW5lIE5VTV9IRVVSSVNUSUMJCTEwMTcKKyNkZWZpbmUJTUFYX1JF T1JERVJFRF9SUEMJMTYKKyNkZWZpbmUgTlVNX0hFVVJJU1RJQwkJMTAzMQogI2RlZmluZSBOSFVT RV9JTklUCQk2NAogI2RlZmluZSBOSFVTRV9JTkMJCTE2CiAjZGVmaW5lIE5IVVNFX01BWAkJMjA0 OAogCiBzdGF0aWMgc3RydWN0IG5mc2hldXIgewogCXN0cnVjdCB2bm9kZSAqbmhfdnA7CS8qIHZw IHRvIG1hdGNoICh1bnJlZmVyZW5jZWQgcG9pbnRlcikgKi8KLQlvZmZfdCBuaF9uZXh0cjsJCS8q IG5leHQgb2Zmc2V0IGZvciBzZXF1ZW50aWFsIGRldGVjdGlvbiAqLworCW9mZl90IG5oX25leHRv ZmY7CS8qIG5leHQgb2Zmc2V0IGZvciBzZXF1ZW50aWFsIGRldGVjdGlvbiAqLwogCWludCBuaF91 c2U7CQkvKiB1c2UgY291bnQgZm9yIHNlbGVjdGlvbiAqLwogCWludCBuaF9zZXFjb3VudDsJLyog aGV1cmlzdGljICovCiB9IG5mc2hldXJbTlVNX0hFVVJJU1RJQ107CkBAIC0xODcsNiArMTg4LDYz IEBAIG5mc3J2X2xvY2tlZHBhaXJfbmQoaW50IHZmczEsIHN0cnVjdCBuYW1laWRhdGEgKm5kCiB9 CiAKIC8qCisgKiBIZXVyaXN0aWMgdG8gZGV0ZWN0IHNlcXVlbnRpYWwgb3BlcmF0aW9uLgorICov CitzdGF0aWMgc3RydWN0IG5mc2hldXIgKgorbmZzcnZfc2VxdWVudGlhbF9oZXVyaXN0aWMoc3Ry dWN0IHVpbyAqdWlvLCBzdHJ1Y3Qgdm5vZGUgKnZwKQoreworCXN0cnVjdCBuZnNoZXVyICpuaDsK KwlpbnQgaGksIHRyeTsKKworCS8qIExvY2F0ZSBiZXN0IGNhbmRpZGF0ZS4gKi8KKwl0cnkgPSAz MjsKKwloaSA9ICgoaW50KSh2bV9vZmZzZXRfdCl2cCAvIHNpemVvZihzdHJ1Y3Qgdm5vZGUpKSAl IE5VTV9IRVVSSVNUSUM7CisJbmggPSAmbmZzaGV1cltoaV07CisJd2hpbGUgKHRyeS0tKSB7CisJ CWlmIChuZnNoZXVyW2hpXS5uaF92cCA9PSB2cCkgeworCQkJbmggPSAmbmZzaGV1cltoaV07CisJ CQlicmVhazsKKwkJfQorCQlpZiAobmZzaGV1cltoaV0ubmhfdXNlID4gMCkKKwkJCS0tbmZzaGV1 cltoaV0ubmhfdXNlOworCQloaSA9IChoaSArIDEpICUgTlVNX0hFVVJJU1RJQzsKKwkJaWYgKG5m c2hldXJbaGldLm5oX3VzZSA8IG5oLT5uaF91c2UpCisJCQluaCA9ICZuZnNoZXVyW2hpXTsKKwl9 CisKKwkvKiBJbml0aWFsaXplIGhpbnQgaWYgdGhpcyBpcyBhIG5ldyBmaWxlLiAqLworCWlmIChu aC0+bmhfdnAgIT0gdnApIHsKKwkJbmgtPm5oX3ZwID0gdnA7CisJCW5oLT5uaF9uZXh0b2ZmID0g dWlvLT51aW9fb2Zmc2V0OworCQluaC0+bmhfdXNlID0gTkhVU0VfSU5JVDsKKwkJaWYgKHVpby0+ dWlvX29mZnNldCA9PSAwKQorCQkJbmgtPm5oX3NlcWNvdW50ID0gNDsKKwkJZWxzZQorCQkJbmgt Pm5oX3NlcWNvdW50ID0gMTsKKwl9CisKKwkvKiBDYWxjdWxhdGUgaGV1cmlzdGljLiAqLworCWlm ICgodWlvLT51aW9fb2Zmc2V0ID09IDAgJiYgbmgtPm5oX3NlcWNvdW50ID4gMCkgfHwKKwkgICAg dWlvLT51aW9fb2Zmc2V0ID09IG5oLT5uaF9uZXh0b2ZmKSB7CisJCS8qIFNlZSBjb21tZW50cyBp biB2ZnNfdm5vcHMuYzpzZXF1ZW50aWFsX2hldXJpc3RpYygpLiAqLworCQluaC0+bmhfc2VxY291 bnQgKz0gaG93bWFueSh1aW8tPnVpb19yZXNpZCwgMTYzODQpOworCQlpZiAobmgtPm5oX3NlcWNv dW50ID4gSU9fU0VRTUFYKQorCQkJbmgtPm5oX3NlcWNvdW50ID0gSU9fU0VRTUFYOworCX0gZWxz ZSBpZiAocWFicyh1aW8tPnVpb19vZmZzZXQgLSBuaC0+bmhfbmV4dG9mZikgPD0gTUFYX1JFT1JE RVJFRF9SUEMgKgorCSAgICBpbWF4KHZwLT52X21vdW50LT5tbnRfc3RhdC5mX2lvc2l6ZSwgdWlv LT51aW9fcmVzaWQpKSB7CisJCS8qIFByb2JhYmx5IGEgcmVvcmRlcmVkIFJQQywgbGVhdmUgc2Vx Y291bnQgYWxvbmUuICovCisJfSBlbHNlIGlmIChuaC0+bmhfc2VxY291bnQgPiAxKSB7CisJCW5o LT5uaF9zZXFjb3VudCAvPSAyOworCX0gZWxzZSB7CisJCW5oLT5uaF9zZXFjb3VudCA9IDA7CisJ fQorCW5oLT5uaF91c2UgKz0gTkhVU0VfSU5DOworCWlmIChuaC0+bmhfdXNlID4gTkhVU0VfTUFY KQorCQluaC0+bmhfdXNlID0gTkhVU0VfTUFYOworCXJldHVybiAobmgpOworfQorCisvKgogICog bmZzIHYzIGFjY2VzcyBzZXJ2aWNlCiAgKi8KIGludApAQCAtODQzLDcgKzkwMSw2IEBAIG5mc3J2 X3JlYWQoc3RydWN0IG5mc3J2X2Rlc2NyaXB0ICpuZnNkLCBzdHJ1Y3QgbmZzCiAJLyoKIAkgKiBD YWxjdWxhdGUgYnl0ZSBjb3VudCB0byByZWFkCiAJICovCi0KIAlpZiAob2ZmID49IHZhcC0+dmFf c2l6ZSkKIAkJY250ID0gMDsKIAllbHNlIGlmICgob2ZmICsgcmVxbGVuKSA+IHZhcC0+dmFfc2l6 ZSkKQEAgLTg1MSw2MSArOTA4LDYgQEAgbmZzcnZfcmVhZChzdHJ1Y3QgbmZzcnZfZGVzY3JpcHQg Km5mc2QsIHN0cnVjdCBuZnMKIAllbHNlCiAJCWNudCA9IHJlcWxlbjsKIAotCS8qCi0JICogQ2Fs Y3VsYXRlIHNlcWNvdW50IGZvciBoZXVyaXN0aWMKLQkgKi8KLQotCXsKLQkJaW50IGhpOwotCQlp bnQgdHJ5ID0gMzI7Ci0KLQkJLyoKLQkJICogTG9jYXRlIGJlc3QgY2FuZGlkYXRlCi0JCSAqLwot Ci0JCWhpID0gKChpbnQpKHZtX29mZnNldF90KXZwIC8gc2l6ZW9mKHN0cnVjdCB2bm9kZSkpICUg TlVNX0hFVVJJU1RJQzsKLQkJbmggPSAmbmZzaGV1cltoaV07Ci0KLQkJd2hpbGUgKHRyeS0tKSB7 Ci0JCQlpZiAobmZzaGV1cltoaV0ubmhfdnAgPT0gdnApIHsKLQkJCQluaCA9ICZuZnNoZXVyW2hp XTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChuZnNoZXVyW2hpXS5uaF91c2UgPiAwKQotCQkJ CS0tbmZzaGV1cltoaV0ubmhfdXNlOwotCQkJaGkgPSAoaGkgKyAxKSAlIE5VTV9IRVVSSVNUSUM7 Ci0JCQlpZiAobmZzaGV1cltoaV0ubmhfdXNlIDwgbmgtPm5oX3VzZSkKLQkJCQluaCA9ICZuZnNo ZXVyW2hpXTsKLQkJfQotCi0JCWlmIChuaC0+bmhfdnAgIT0gdnApIHsKLQkJCW5oLT5uaF92cCA9 IHZwOwotCQkJbmgtPm5oX25leHRyID0gb2ZmOwotCQkJbmgtPm5oX3VzZSA9IE5IVVNFX0lOSVQ7 Ci0JCQlpZiAob2ZmID09IDApCi0JCQkJbmgtPm5oX3NlcWNvdW50ID0gNDsKLQkJCWVsc2UKLQkJ CQluaC0+bmhfc2VxY291bnQgPSAxOwotCQl9Ci0KLQkJLyoKLQkJICogQ2FsY3VsYXRlIGhldXJp c3RpYwotCQkgKi8KLQotCQlpZiAoKG9mZiA9PSAwICYmIG5oLT5uaF9zZXFjb3VudCA+IDApIHx8 IG9mZiA9PSBuaC0+bmhfbmV4dHIpIHsKLQkJCWlmICgrK25oLT5uaF9zZXFjb3VudCA+IElPX1NF UU1BWCkKLQkJCQluaC0+bmhfc2VxY291bnQgPSBJT19TRVFNQVg7Ci0JCX0gZWxzZSBpZiAobmgt Pm5oX3NlcWNvdW50ID4gMSkgewotCQkJbmgtPm5oX3NlcWNvdW50ID0gMTsKLQkJfSBlbHNlIHsK LQkJCW5oLT5uaF9zZXFjb3VudCA9IDA7Ci0JCX0KLQkJbmgtPm5oX3VzZSArPSBOSFVTRV9JTkM7 Ci0JCWlmIChuaC0+bmhfdXNlID4gTkhVU0VfTUFYKQotCQkJbmgtPm5oX3VzZSA9IE5IVVNFX01B WDsKLQkJaW9mbGFnIHw9IG5oLT5uaF9zZXFjb3VudCA8PCBJT19TRVFTSElGVDsKLSAgICAgICAg fQotCiAJbmZzbV9yZXBseShORlNYX1BPU1RPUE9SRkFUVFIodjMpICsgMyAqIE5GU1hfVU5TSUdO RUQrbmZzbV9ybmR1cChjbnQpKTsKIAlpZiAodjMpIHsKIAkJdGwgPSBuZnNtX2J1aWxkKHVfaW50 MzJfdCAqLCBORlNYX1YzRkFUVFIgKyA0ICogTkZTWF9VTlNJR05FRCk7CkBAIC05NjMsOSArOTY1 LDExIEBAIG5mc3J2X3JlYWQoc3RydWN0IG5mc3J2X2Rlc2NyaXB0ICpuZnNkLCBzdHJ1Y3QgbmZz CiAJCXVpb3AtPnVpb19yZXNpZCA9IGxlbjsKIAkJdWlvcC0+dWlvX3J3ID0gVUlPX1JFQUQ7CiAJ CXVpb3AtPnVpb19zZWdmbGcgPSBVSU9fU1lTU1BBQ0U7CisJCW5oID0gbmZzcnZfc2VxdWVudGlh bF9oZXVyaXN0aWModWlvcCwgdnApOworCQlpb2ZsYWcgfD0gbmgtPm5oX3NlcWNvdW50IDw8IElP X1NFUVNISUZUOwogCQllcnJvciA9IFZPUF9SRUFEKHZwLCB1aW9wLCBJT19OT0RFTE9DS0VEIHwg aW9mbGFnLCBjcmVkKTsKLQkJb2ZmID0gdWlvcC0+dWlvX29mZnNldDsKLQkJbmgtPm5oX25leHRy ID0gb2ZmOworCQlpZiAoZXJyb3IgPT0gMCkKKwkJCW5oLT5uaF9uZXh0b2ZmID0gdWlvcC0+dWlv X29mZnNldDsKIAkJZnJlZSgoY2FkZHJfdClpdjIsIE1fVEVNUCk7CiAJCWlmIChlcnJvciB8fCAo Z2V0cmV0ID0gVk9QX0dFVEFUVFIodnAsIHZhcCwgY3JlZCkpKSB7CiAJCQlpZiAoIWVycm9yKQpA QCAtMTAzMCw2ICsxMDM0LDcgQEAgbmZzcnZfd3JpdGUoc3RydWN0IG5mc3J2X2Rlc2NyaXB0ICpu ZnNkLCBzdHJ1Y3QgbmYKIAlpbnQgdjMgPSAobmZzZC0+bmRfZmxhZyAmIE5EX05GU1YzKTsKIAlz dHJ1Y3QgbWJ1ZiAqbWIsICptcmVxOwogCXN0cnVjdCB2bm9kZSAqdnAgPSBOVUxMOworCXN0cnVj dCBuZnNoZXVyICpuaDsKIAluZnNmaF90IG5maDsKIAlmaGFuZGxlX3QgKmZocDsKIAlzdHJ1Y3Qg dWlvIGlvLCAqdWlvcCA9ICZpbzsKQEAgLTExNzAsNyArMTE3NSwxMSBAQCBuZnNydl93cml0ZShz dHJ1Y3QgbmZzcnZfZGVzY3JpcHQgKm5mc2QsIHN0cnVjdCBuZgogCSAgICB1aW9wLT51aW9fc2Vn ZmxnID0gVUlPX1NZU1NQQUNFOwogCSAgICB1aW9wLT51aW9fdGQgPSBOVUxMOwogCSAgICB1aW9w LT51aW9fb2Zmc2V0ID0gb2ZmOworCSAgICBuaCA9IG5mc3J2X3NlcXVlbnRpYWxfaGV1cmlzdGlj KHVpb3AsIHZwKTsKKwkgICAgaW9mbGFncyB8PSBuaC0+bmhfc2VxY291bnQgPDwgSU9fU0VRU0hJ RlQ7CiAJICAgIGVycm9yID0gVk9QX1dSSVRFKHZwLCB1aW9wLCBpb2ZsYWdzLCBjcmVkKTsKKwkg ICAgaWYgKGVycm9yID09IDApCisJCSAgICBuaC0+bmhfbmV4dG9mZiA9IHVpb3AtPnVpb19vZmZz ZXQ7CiAJICAgIC8qIFVubG9ja2VkIHdyaXRlLiAqLwogCSAgICBuZnNydnN0YXRzLnNydnZvcF93 cml0ZXMrKzsKIAkgICAgZnJlZSgoY2FkZHJfdClpdiwgTV9URU1QKTsK --f46d0444e96b14738804b20ba655--