From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Collins Subject: Load balancing reads on dmraid1 (and 01) arrays Date: Tue, 5 Jun 2012 12:54:42 +1200 Message-ID: Reply-To: device-mapper development Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=e89a8fb202a0a3b27104c1af18cf Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com To: dm-devel@redhat.com List-Id: dm-devel.ids --e89a8fb202a0a3b27104c1af18cf Content-Type: text/plain; charset=ISO-8859-1 Hi, I've had this sitting in a local tree for a bit (> 12 months - blush!), been meaning to send it here... Its my first dm submission, so please be gentle :) - I'll happily fix up any issues in the patch (or in other metadata) - though I have limited bandwidth to spend on this, so I may not get around to it immediately. The attached patches change dmraid1 to use all backing devices to satisfy read requests rather than just one. The first uses a very simple heuristic - which ever device had the most recent read dispatched to a given location is preferred for subsequent reads. There is an obvious theoretical issue with this: writes move the disk head as well and so effectively should reset allow the devices to the same position. The problem though is that this really is a scheduling problem, and one that the multipath stack would be better at handling. (e.g. multipath shoud be aware of corner cases like : what if there is a dispatched read on the device we think is closest, *after* a write. or what if load isn't being balanced because all the reads are happening in one spot and one device is totally idle). So, I used a very simple heuristic, which works well for me - I get significantly better read performance with the first patch than without. The second patch tweaks the heuristic to handle the case where one disk is being monopolised, which I found happens quite frequently with e.g. kernel builds, where there is a high locality of reference to the content. Again, its not perfect, and in this case there is a horrible magic constant :(. Again, *I* find this a net win, but I have no idea whether other folk will find it so. I had a brief look at making this use multipath instead, but that looks to my naive eye to be both a significant undertaking (which I don't have time for - sorry!) and also perhaps conceptually problematic, as this needs to be an asymmetric multipath: reads can multipath but writes must hit all devices. Cheers, Rob --e89a8fb202a0a3b27104c1af18cf Content-Type: application/octet-stream; name="0001-Load-balance-dm-raid1-reads-by-most-recently-dispatc.patch" Content-Disposition: attachment; filename="0001-Load-balance-dm-raid1-reads-by-most-recently-dispatc.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h32994ra0 RnJvbSBhNzA0N2RjYjRmMTkzMzUwODlkZTM5YmNjNWZhZWUyN2U2OGYxYjc0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgQ29sbGlucyA8cm9iZXJ0Y0Byb2JlcnRjb2xsaW5z Lm5ldD4KRGF0ZTogRnJpLCA4IEp1bCAyMDExIDIyOjQyOjAyICsxMjAwClN1YmplY3Q6IFtQQVRD SCAxLzJdIExvYWQgYmFsYW5jZSBkbS1yYWlkMSByZWFkcyBieSBtb3N0IHJlY2VudGx5IGRpc3Bh dGNoZWQKIHNlY3Rvci4KCi0tLQogZHJpdmVycy9tZC9kbS1yYWlkMS5jIHwgICA5NyArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiAxIGZpbGUgY2hhbmdl ZCwgODMgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tZC9kbS1yYWlkMS5jIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCmluZGV4IDliZmQwNTcuLmUx NmEwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYworKysgYi9kcml2ZXJzL21k L2RtLXJhaWQxLmMKQEAgLTI2LDYgKzI2LDE0IEBACiAjZGVmaW5lIERNX1JBSUQxX0hBTkRMRV9F UlJPUlMgMHgwMQogI2RlZmluZSBlcnJvcnNfaGFuZGxlZChwKQkoKHApLT5mZWF0dXJlcyAmIERN X1JBSUQxX0hBTkRMRV9FUlJPUlMpCiAKKyNpZm5kZWYgUFJJTlRLCisjICBpZiBERUJVRyA+IDAK KyMgICAgZGVmaW5lIFBSSU5USyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyB4KQorIyAgZWxzZQor IyAgICBkZWZpbmUgUFJJTlRLKHguLi4pCisjICBlbmRpZgorI2VuZGlmCisKIHN0YXRpYyBERUNM QVJFX1dBSVRfUVVFVUVfSEVBRChfa21pcnJvcmRfcmVjb3Zlcnlfc3RvcHBlZCk7CiAKIC8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KQEAgLTQ0LDYgKzUyLDcgQEAgc3RydWN0IG1pcnJvciB7CiAJdW5zaWduZWQgbG9uZyBl cnJvcl90eXBlOwogCXN0cnVjdCBkbV9kZXYgKmRldjsKIAlzZWN0b3JfdCBvZmZzZXQ7CisgICAg ICAgIHNlY3Rvcl90IGxhc3RfcmVhZF9wb3NpdGlvbjsgLyogbGV0IHVzIG1hcCBzZXF1ZW50aWFs IElPIHRvIG9uZSBkaXNrICovCiB9OwogCiBzdHJ1Y3QgbWlycm9yX3NldCB7CkBAIC00MDMsMTkg KzQxMiw3NyBAQCBzdGF0aWMgdm9pZCBkb19yZWNvdmVyeShzdHJ1Y3QgbWlycm9yX3NldCAqbXMp CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgKiBSZWFkcwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHN0cnVjdCBtaXJyb3Ig KmNob29zZV9taXJyb3Ioc3RydWN0IG1pcnJvcl9zZXQgKm1zLCBzZWN0b3JfdCBzZWN0b3IpCitz dGF0aWMgc2VjdG9yX3QgYmlvX2Rpc3RhbmNlKHN0cnVjdCBtaXJyb3IgKm0sIHNlY3Rvcl90IHNl Y3RvcikKIHsKLQlzdHJ1Y3QgbWlycm9yICptID0gZ2V0X2RlZmF1bHRfbWlycm9yKG1zKTsKLQot CWRvIHsKLQkJaWYgKGxpa2VseSghYXRvbWljX3JlYWQoJm0tPmVycm9yX2NvdW50KSkpCi0JCQly ZXR1cm4gbTsKLQotCQlpZiAobS0tID09IG1zLT5taXJyb3IpCi0JCQltICs9IG1zLT5ucl9taXJy b3JzOwotCX0gd2hpbGUgKG0gIT0gZ2V0X2RlZmF1bHRfbWlycm9yKG1zKSk7CisgICAgICAgIHJl dHVybiBtLT5sYXN0X3JlYWRfcG9zaXRpb24gPiBzZWN0b3IgPyBtLT5sYXN0X3JlYWRfcG9zaXRp b24gLSBzZWN0b3IgOiBzZWN0b3IgLSBtLT5sYXN0X3JlYWRfcG9zaXRpb247Cit9CiAKLQlyZXR1 cm4gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgbWlycm9yICpjaG9vc2VfbWlycm9yKHN0cnVjdCBtaXJy b3Jfc2V0ICptcywgc2VjdG9yX3Qgc2VjdG9yLCBzZWN0b3JfdCBjb3VudCwgYm9vbCB1cGRhdGVf cmVhZF9wb3MpCit7CisgICAgICAgIHN0cnVjdCBtaXJyb3IgKm0sICpjbG9zZXN0ID0gTlVMTDsK KyAgICAgICAgc2VjdG9yX3QgZGlzdGFuY2U7CisgICAgICAgIHNlY3Rvcl90IHRlbXBfZGlzdGFu Y2U7CisgICAgICAgIFBSSU5USygiQ2hvb3NpbmcgbWlycm9yOiAlbGx1ICVsbHUgJWRcbiIsCisg ICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2VjdG9yLAorICAgICAgICAgICAg ICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNvdW50LAorICAgICAgICAgICAgICAgIChpbnQpIHVw ZGF0ZV9yZWFkX3Bvcyk7CisgICAgICAgIC8qIEZpbmQgdGhlIGZpcnN0IHVzYWJsZSAqLworICAg ICAgICBmb3IgKG0gPSAmbXMtPm1pcnJvclttcy0+bnJfbWlycm9yc107IG0gIT0gbXMtPm1pcnJv cjspIHsKKwkJaWYgKGxpa2VseSghYXRvbWljX3JlYWQoJigtLW0pLT5lcnJvcl9jb3VudCkpKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IGJpb19kaXN0YW5jZShtLCBzZWN0 b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VzdCA9IG07CisgICAgICAgICAgICAg ICAgICAgICAgICBQUklOVEsoIkNob29zaW5nIG1pcnJvcjogJWxsdSAlbGx1ICVkOiBjbG9zZXN0 PSVwIG1pcnJvcj0lcCBkaXN0YW5jZT0lbGx1IGxhc3QtcmVhZCAlbGx1XG4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzZWN0b3IsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNvdW50LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSB1cGRhdGVfcmVhZF9wb3MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3QsIG1zLT5taXJyb3IsICh1bnNp Z25lZCBsb25nIGxvbmcpZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh1bnNpZ25lZCBsb25nIGxvbmcpbS0+bGFzdF9yZWFkX3Bvc2l0aW9uKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBQUklOVEsoIkNob29zaW5nIG1pcnJvcjogJWxsdSAlbGx1ICVkOiBoYXMt ZXJyb3JzICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQg bG9uZyBsb25nKSBzZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNp Z25lZCBsb25nIGxvbmcpIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo aW50KSB1cGRhdGVfcmVhZF9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0 b21pY19yZWFkKCZtLT5lcnJvcl9jb3VudCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICAvKiBOb3RoaW5nIHVzYWJsZSAqLworICAgICAgICBpZiAodW5saWtlbHkoY2xv c2VzdCA9PSBOVUxMKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYg KHVubGlrZWx5KGNsb3Nlc3QgPT0gbXMtPm1pcnJvcikpCisgICAgICAgICAgICAgICAgcmV0dXJu IGNsb3Nlc3Q7CisgICAgICAgIC8qIE5vdyBzZWUgaWYgdGhlcmUgaXMgYSBjbG9zZXIgbWlycm9y ICovCisgICAgICAgIGZvciAobSA9IGNsb3Nlc3Q7IG0gIT0gbXMtPm1pcnJvcjspIHsKKyAgICAg ICAgICAgICAgICBpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJigtLW0pLT5lcnJvcl9jb3VudCkp KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBSSU5USygiQ2hvb3NpbmcgbWlycm9yOiAlbGx1 ICVsbHUgJWQ6IGhhcy1lcnJvcnMgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY291bnQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChpbnQpIHVwZGF0ZV9yZWFkX3BvcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXRvbWljX3JlYWQoJm0tPmVycm9yX2NvdW50KSk7CisgICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg dGVtcF9kaXN0YW5jZSA9IGJpb19kaXN0YW5jZShtLCBzZWN0b3IpOworICAgICAgICAgICAgICAg IFBSSU5USygiQ2hvb3NpbmcgbWlycm9yOiAlbGx1ICVsbHUgJWQ6IGNsb3Nlc3Q9JXAgbWlycm9y PSVwIGRpc3RhbmNlPSVsbHUsIHRlbXBfZGlzdGFuY2U9JWxsdSBsYXN0LXJlYWQgJWxsdVxuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNlY3RvciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNvdW50LAorICAgICAg ICAgICAgICAgICAgICAgICAgKGludCkgdXBkYXRlX3JlYWRfcG9zLAorICAgICAgICAgICAgICAg ICAgICAgICAgY2xvc2VzdCwgbXMtPm1pcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICh1 bnNpZ25lZCBsb25nIGxvbmcpIGRpc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVu c2lnbmVkIGxvbmcgbG9uZykgdGVtcF9kaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICh1bnNpZ25lZCBsb25nIGxvbmcpbS0+bGFzdF9yZWFkX3Bvc2l0aW9uKTsKKyAgICAgICAgICAg ICAgICBpZiAodGVtcF9kaXN0YW5jZSA8IGRpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBkaXN0YW5jZSA9IHRlbXBfZGlzdGFuY2U7CisgICAgICAgICAgICAgICAgICAgICAgICBj bG9zZXN0ID0gbTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogVE9E TzogYWxzbyB0cmFjayB3aGVyZSBJTydzIGhhdmUgY29tcGxldGVkIGFnYWluc3Q6IHRyYWNraW5n IHN1Ym1pdHMKKyAgICAgICAgICogbGV0cyB1cyBoYW5kbGUgc2VxdWVudGlhbCByZXF1ZXN0cywg YnV0IHRoZSBkaXNrcyBwcm9iYWJseSBoYXZlIGFoY2kKKyAgICAgICAgICogdGFnZ2luZyAtIGlm IHdlIGtub3cgd2hlcmUgdGhlIGRpc2sgaXMgYWZ0ZXIgZWl0aGVyIGEgd3JpdGUgb3IgYQorICAg ICAgICAgKiByZWFkIHdlIGNhbiBkaXNwYXRjaCBuZWFyZXIgaXQuCisgICAgICAgICAqLworICAg ICAgICBpZiAobGlrZWx5KHVwZGF0ZV9yZWFkX3BvcykpCisgICAgICAgICAgICAgICAgY2xvc2Vz dC0+bGFzdF9yZWFkX3Bvc2l0aW9uID0gc2VjdG9yICsgY291bnQ7CisgICAgICAgIHJldHVybiBj bG9zZXN0OwogfQogCiBzdGF0aWMgaW50IGRlZmF1bHRfb2soc3RydWN0IG1pcnJvciAqbSkKQEAg LTQzMSw3ICs0OTgsNyBAQCBzdGF0aWMgaW50IG1pcnJvcl9hdmFpbGFibGUoc3RydWN0IG1pcnJv cl9zZXQgKm1zLCBzdHJ1Y3QgYmlvICpiaW8pCiAJcmVnaW9uX3QgcmVnaW9uID0gZG1fcmhfYmlv X3RvX3JlZ2lvbihtcy0+cmgsIGJpbyk7CiAKIAlpZiAobG9nLT50eXBlLT5pbl9zeW5jKGxvZywg cmVnaW9uLCAwKSkKLQkJcmV0dXJuIGNob29zZV9taXJyb3IobXMsICBiaW8tPmJpX3NlY3Rvcikg PyAxIDogMDsKKwkJcmV0dXJuIGNob29zZV9taXJyb3IobXMsICBiaW8tPmJpX3NlY3RvciwgYmlv LT5iaV9zaXplID4+IDksIGZhbHNlKSA/IDEgOiAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MDAs NiArNTY3LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jYWxsYmFjayh1bnNpZ25lZCBsb25nIGVycm9y LCB2b2lkICpjb250ZXh0KQogCWJpb19zZXRfbShiaW8sIE5VTEwpOwogCiAJaWYgKGxpa2VseSgh ZXJyb3IpKSB7CisgICAgICAgICAgICAgICAgLyogU2hvdWxkIHVwZGF0ZSBoZWFkIHBvc2l0aW9u IGhlcmUgKi8KIAkJYmlvX2VuZGlvKGJpbywgMCk7CiAJCXJldHVybjsKIAl9CkBAIC01NTgsNyAr NjI2LDcgQEAgc3RhdGljIHZvaWQgZG9fcmVhZHMoc3RydWN0IG1pcnJvcl9zZXQgKm1zLCBzdHJ1 Y3QgYmlvX2xpc3QgKnJlYWRzKQogCQkgKiBXZSBjYW4gb25seSByZWFkIGJhbGFuY2UgaWYgdGhl IHJlZ2lvbiBpcyBpbiBzeW5jLgogCQkgKi8KIAkJaWYgKGxpa2VseShyZWdpb25faW5fc3luYyht cywgcmVnaW9uLCAxKSkpCi0JCQltID0gY2hvb3NlX21pcnJvcihtcywgYmlvLT5iaV9zZWN0b3Ip OworCQkJbSA9IGNob29zZV9taXJyb3IobXMsIGJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUg Pj4gOSwgMSk7CiAJCWVsc2UgaWYgKG0gJiYgYXRvbWljX3JlYWQoJm0tPmVycm9yX2NvdW50KSkK IAkJCW0gPSBOVUxMOwogCkBAIC05NDAsNiArMTAwOCw3IEBAIHN0YXRpYyBpbnQgZ2V0X21pcnJv cihzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCBkbV90YXJnZXQgKnRpLAogCWF0b21pY19z ZXQoJihtcy0+bWlycm9yW21pcnJvcl0uZXJyb3JfY291bnQpLCAwKTsKIAltcy0+bWlycm9yW21p cnJvcl0uZXJyb3JfdHlwZSA9IDA7CiAJbXMtPm1pcnJvclttaXJyb3JdLm9mZnNldCA9IG9mZnNl dDsKKwltcy0+bWlycm9yW21pcnJvcl0ubGFzdF9yZWFkX3Bvc2l0aW9uID0gMDsKIAogCXJldHVy biAwOwogfQpAQCAtMTE4MSw3ICsxMjUwLDcgQEAgc3RhdGljIGludCBtaXJyb3JfbWFwKHN0cnVj dCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8sCiAJICogVGhlIHJlZ2lvbiBpcyBpbi1z eW5jIGFuZCB3ZSBjYW4gcGVyZm9ybSByZWFkcyBkaXJlY3RseS4KIAkgKiBTdG9yZSBlbm91Z2gg aW5mb3JtYXRpb24gc28gd2UgY2FuIHJldHJ5IGlmIGl0IGZhaWxzLgogCSAqLwotCW0gPSBjaG9v c2VfbWlycm9yKG1zLCBiaW8tPmJpX3NlY3Rvcik7CisJbSA9IGNob29zZV9taXJyb3IobXMsIGJp by0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUgPj4gOSwgMSk7CiAJaWYgKHVubGlrZWx5KCFtKSkK IAkJcmV0dXJuIC1FSU87CiAKLS0gCjEuNy45LjUKCg== --e89a8fb202a0a3b27104c1af18cf Content-Type: application/octet-stream; name="0002-Force-switching-drives-after-enough-linear-IO-allows.patch" Content-Disposition: attachment; filename="0002-Force-switching-drives-after-enough-linear-IO-allows.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h32997ys1 RnJvbSA2OTM4MDZmODcyZmYxMTlhYTUyNjIxNmVlNDU2MjhlOTI5YzM4NmY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgQ29sbGlucyA8cm9iZXJ0Y0Byb2JlcnRjb2xsaW5z Lm5ldD4KRGF0ZTogTW9uLCA0IEp1biAyMDEyIDE1OjAxOjE0ICsxMjAwClN1YmplY3Q6IFtQQVRD SCAyLzJdIEZvcmNlIHN3aXRjaGluZyBkcml2ZXMgYWZ0ZXIgZW5vdWdoIGxpbmVhciBJTyAtIGFs bG93cwogcmVhZGFoZWFkIHRvIGV4ZXJjaXNlIHBhcmFsbGVsaXNtIGFzIHdlbGwuCgotLS0KIGRy aXZlcnMvbWQvZG0tcmFpZDEuYyB8ICAgNTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKyksIDgg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jIGIvZHJpdmVy cy9tZC9kbS1yYWlkMS5jCmluZGV4IGUxNmEwMzAuLmI5NTA0ZDggMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvbWQvZG0tcmFpZDEuYworKysgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKQEAgLTIyLDExICsy MiwxOSBAQAogI2RlZmluZSBETV9NU0dfUFJFRklYICJyYWlkMSIKIAogI2RlZmluZSBNQVhfUkVD T1ZFUlkgMQkvKiBNYXhpbXVtIG51bWJlciBvZiByZWdpb25zIHJlY292ZXJlZCBpbiBwYXJhbGxl bC4gKi8KKy8qIE1heGltdW0gc2VjdG9yIGNvdW50IG9mIHNlcXVlbnRpYWwgSU8gc2VudCB0byBv bmUgbWlycm9yLiBUaGlzIG5lZWRzIHRvIGJlCisgKiBsYXJnZSBlbm91Z2ggbm90IHRvIHNhdHVy YXRlIGRyaXZlIGNvbW1hbmQgcXVldWVzIGJ1dCBzbWFsbCBlbm91Z2ggdGhhdCB3ZQorICogY2Fu IGtlZXAgYm90aCBkcml2ZXMgYWN0aXZlLgorICovCisjZGVmaW5lIERNX1NFUVVFTlRJQUxfSU9f TUlSUk9SX0xJTUlUIDEzMTA3MgogCiAjZGVmaW5lIERNX1JBSUQxX0hBTkRMRV9FUlJPUlMgMHgw MQogI2RlZmluZSBlcnJvcnNfaGFuZGxlZChwKQkoKHApLT5mZWF0dXJlcyAmIERNX1JBSUQxX0hB TkRMRV9FUlJPUlMpCiAKICNpZm5kZWYgUFJJTlRLCisjICBpZm5kZWYgREVCVUcKKyMgICAgZGVm aW5lIERFQlVHIDAKKyMgIGVuZGlmCiAjICBpZiBERUJVRyA+IDAKICMgICAgZGVmaW5lIFBSSU5U Syh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyB4KQogIyAgZWxzZQpAQCAtNTIsNiArNjAsNyBAQCBz dHJ1Y3QgbWlycm9yIHsKIAl1bnNpZ25lZCBsb25nIGVycm9yX3R5cGU7CiAJc3RydWN0IGRtX2Rl diAqZGV2OwogCXNlY3Rvcl90IG9mZnNldDsKKyAgICAgICAgc2VjdG9yX3Qgc2VxdWVudGlhbF9p b19zdGFydF9wb3NpdGlvbjsgLyogbGV0cyB1cyBkZXRlY3QgbG9uZyBydW5zIG9mIHNlcXVlbnRp YWwgSU8gZm9yIGxvYWQgYmFsYW5jaW5nICovCiAgICAgICAgIHNlY3Rvcl90IGxhc3RfcmVhZF9w b3NpdGlvbjsgLyogbGV0IHVzIG1hcCBzZXF1ZW50aWFsIElPIHRvIG9uZSBkaXNrICovCiB9Owog CkBAIC00MTcsMTEgKzQyNiwxOCBAQCBzdGF0aWMgc2VjdG9yX3QgYmlvX2Rpc3RhbmNlKHN0cnVj dCBtaXJyb3IgKm0sIHNlY3Rvcl90IHNlY3RvcikKICAgICAgICAgcmV0dXJuIG0tPmxhc3RfcmVh ZF9wb3NpdGlvbiA+IHNlY3RvciA/IG0tPmxhc3RfcmVhZF9wb3NpdGlvbiAtIHNlY3RvciA6IHNl Y3RvciAtIG0tPmxhc3RfcmVhZF9wb3NpdGlvbjsKIH0KIAorLyogUmV0dXJuIHRoZSBudW1iZXIg b2Ygc2VxdWVudGlhbCByZWFkIElPIGluIHNlY3RvcnMgdW5kZXJ0YWtlbiBzbyBmYXIgYnkgbSAq Lworc3RhdGljIHNlY3Rvcl90IHNlcXVlbnRpYWxfaW9zKHN0cnVjdCBtaXJyb3IgKm0pCit7Cisg ICAgICAgIHJldHVybiBtLT5sYXN0X3JlYWRfcG9zaXRpb24gLSBtLT5zZXF1ZW50aWFsX2lvX3N0 YXJ0X3Bvc2l0aW9uOworfQorCiBzdGF0aWMgc3RydWN0IG1pcnJvciAqY2hvb3NlX21pcnJvcihz dHJ1Y3QgbWlycm9yX3NldCAqbXMsIHNlY3Rvcl90IHNlY3Rvciwgc2VjdG9yX3QgY291bnQsIGJv b2wgdXBkYXRlX3JlYWRfcG9zKQogewogICAgICAgICBzdHJ1Y3QgbWlycm9yICptLCAqY2xvc2Vz dCA9IE5VTEw7CiAgICAgICAgIHNlY3Rvcl90IGRpc3RhbmNlOwogICAgICAgICBzZWN0b3JfdCB0 ZW1wX2Rpc3RhbmNlOworICAgICAgICBib29sIHByZWZlcl9vdGhlcl9taXJyb3I7CiAgICAgICAg IFBSSU5USygiQ2hvb3NpbmcgbWlycm9yOiAlbGx1ICVsbHUgJWRcbiIsCiAgICAgICAgICAgICAg ICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2VjdG9yLAogICAgICAgICAgICAgICAgICh1bnNpZ25l ZCBsb25nIGxvbmcpIGNvdW50LApAQCAtNDMxLDEyICs0NDcsMTUgQEAgc3RhdGljIHN0cnVjdCBt aXJyb3IgKmNob29zZV9taXJyb3Ioc3RydWN0IG1pcnJvcl9zZXQgKm1zLCBzZWN0b3JfdCBzZWN0 b3IsIHNlY3QKIAkJaWYgKGxpa2VseSghYXRvbWljX3JlYWQoJigtLW0pLT5lcnJvcl9jb3VudCkp KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IGJpb19kaXN0YW5jZShtLCBz ZWN0b3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VzdCA9IG07Ci0gICAgICAgICAg ICAgICAgICAgICAgICBQUklOVEsoIkNob29zaW5nIG1pcnJvcjogJWxsdSAlbGx1ICVkOiBjbG9z ZXN0PSVwIG1pcnJvcj0lcCBkaXN0YW5jZT0lbGx1IGxhc3QtcmVhZCAlbGx1XG4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgUFJJTlRLKCJDaG9vc2luZyBtaXJyb3I6ICVsbHUgJWxsdSAlZDog Y2xvc2VzdD0lcCBtaXJyb3I9JXAgZGlzdGFuY2U9JWxsdSBsYXN0LXJlYWQgJWxsdSBzZXF1ZW50 aWFsICVsbHVcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBs b25nIGxvbmcpIHNlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2ln bmVkIGxvbmcgbG9uZykgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChp bnQpIHVwZGF0ZV9yZWFkX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xv c2VzdCwgbXMtPm1pcnJvciwgKHVuc2lnbmVkIGxvbmcgbG9uZylkaXN0YW5jZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltLT5sYXN0X3JlYWRf cG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9u ZyBsb25nKW0tPmxhc3RfcmVhZF9wb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzZXF1ZW50aWFsX2lvcyhtKSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAvKiBBY3RpdmVseSBwcmVmZXIgYSBkaWZmZXJlbnQgbWlycm9yIG9uIHNl cXVlbnRpYWwgSU8gaWYgd2UgaGF2ZSBleGNlZWRlZCB0aGUgdGhyZXNob2xkICovCisgICAgICAg ICAgICAgICAgICAgICAgICBwcmVmZXJfb3RoZXJfbWlycm9yID0gZGlzdGFuY2U9PTAgJiYgKHNl cXVlbnRpYWxfaW9zKG0pID49IERNX1NFUVVFTlRJQUxfSU9fTUlSUk9SX0xJTUlUKTsKICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICBQUklOVEsoIkNob29zaW5nIG1pcnJvcjogJWxsdSAlbGx1ICVk OiBoYXMtZXJyb3JzICVkXG4iLApAQCAtNDQ5LDkgKzQ2OCwxNSBAQCBzdGF0aWMgc3RydWN0IG1p cnJvciAqY2hvb3NlX21pcnJvcihzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHNlY3Rvcl90IHNlY3Rv ciwgc2VjdAogICAgICAgICAvKiBOb3RoaW5nIHVzYWJsZSAqLwogICAgICAgICBpZiAodW5saWtl bHkoY2xvc2VzdCA9PSBOVUxMKSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAg ICAgLyogT25seSBvbmUgZHJpdmUgYXZhaWxhbGUgKi8KICAgICAgICAgaWYgKHVubGlrZWx5KGNs b3Nlc3QgPT0gbXMtPm1pcnJvcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3Q7Ci0g ICAgICAgIC8qIE5vdyBzZWUgaWYgdGhlcmUgaXMgYSBjbG9zZXIgbWlycm9yICovCisgICAgICAg IC8qIE5vdyBzZWUgaWYgdGhlcmUgaXMgYW5vdGhlciB1c2FibGUgbWlycm9yIHRoYXQgaXMgY2xv c2VyIGFuZCBoYXMgbm90CisgICAgICAgICAqIGhhZCB0b28gbXVjaCBzZXF1ZW50aWFsIHJlYWQg SU8gZGlzcGF0Y2hlZCB0byBpdCB5ZXQuCisgICAgICAgICAqIFRPRE86IFdoZW4gTiA9IG9yID4g bnJfbWlycm9ycyBzZXRzIG9mIHNlcXVlbnRpYWwgcmVhZCBJTyBhcmUKKyAgICAgICAgICogaGFw cGVuaW5nLCBhbGxvdyBlYWNoIG1pcnJvciB0byBzcGVjaWFsaXNlLCBhbmQgYXZvaWQgZXh0cmFu ZW91cworICAgICAgICAgKiBzZWVraW5nLgorICAgICAgICAgKi8KICAgICAgICAgZm9yIChtID0g Y2xvc2VzdDsgbSAhPSBtcy0+bWlycm9yOykgewogICAgICAgICAgICAgICAgIGlmICh1bmxpa2Vs eShhdG9taWNfcmVhZCgmKC0tbSktPmVycm9yX2NvdW50KSkpewogICAgICAgICAgICAgICAgICAg ICAgICAgUFJJTlRLKCJDaG9vc2luZyBtaXJyb3I6ICVsbHUgJWxsdSAlZDogaGFzLWVycm9ycyAl ZFxuIiwKQEAgLTQ2MiwxNyArNDg3LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgbWlycm9yICpjaG9vc2Vf bWlycm9yKHN0cnVjdCBtaXJyb3Jfc2V0ICptcywgc2VjdG9yX3Qgc2VjdG9yLCBzZWN0CiAgICAg ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgdGVtcF9kaXN0YW5jZSA9IGJpb19kaXN0YW5jZShtLCBzZWN0b3IpOwotICAgICAg ICAgICAgICAgIFBSSU5USygiQ2hvb3NpbmcgbWlycm9yOiAlbGx1ICVsbHUgJWQ6IGNsb3Nlc3Q9 JXAgbWlycm9yPSVwIGRpc3RhbmNlPSVsbHUsIHRlbXBfZGlzdGFuY2U9JWxsdSBsYXN0LXJlYWQg JWxsdVxuIiwKKyAgICAgICAgICAgICAgICBQUklOVEsoIkNob29zaW5nIG1pcnJvcjogJWxsdSAl bGx1ICVkOiBjbG9zZXN0PSVwIG09JXAgZGlzdGFuY2U9JWxsdSwgdGVtcF9kaXN0YW5jZT0lbGx1 IGxhc3QtcmVhZCAlbGx1IHNlcXVlbnRpYWwgJWxsdSBwcmVmZXItb3RoZXIgJWRcbiIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzZWN0b3IsCiAgICAgICAg ICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjb3VudCwKICAgICAgICAgICAg ICAgICAgICAgICAgIChpbnQpIHVwZGF0ZV9yZWFkX3BvcywKLSAgICAgICAgICAgICAgICAgICAg ICAgIGNsb3Nlc3QsIG1zLT5taXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZXN0 LCBtLAogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGlzdGFu Y2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB0ZW1wX2Rp c3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltLT5s YXN0X3JlYWRfcG9zaXRpb24pOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wX2Rpc3RhbmNlIDwg ZGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcp bS0+bGFzdF9yZWFkX3Bvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVk IGxvbmcgbG9uZylzZXF1ZW50aWFsX2lvcyhtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChp bnQpcHJlZmVyX290aGVyX21pcnJvcik7CisgICAgICAgICAgICAgICAgLyogVXNlIHRoaXMgdmFs aWQgbWlycm9yIGlmOgorICAgICAgICAgICAgICAgICAqICAtIHRoZSBmaXJzdCB1c2FibGUgbWly cm9yIGhhcyBoaXQgaXRzIHNlcXVlbnRpYWwgbGltaXQKKyAgICAgICAgICAgICAgICAgKiAgLSBv ciB0aGlzIG1pcnJvciBpcyBjbG9zZXIgYW5kIChvbiBzZXF1ZW50aWFsIElPKSBoYXMgbm90IGhp dCBpdHMgbGltaXQKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAocHJl ZmVyX290aGVyX21pcnJvciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKHRlbXBfZGlzdGFu Y2UgPCBkaXN0YW5jZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHRlbXBfZGlzdGFuY2Ug IT0gMCB8fCBzZXF1ZW50aWFsX2lvcyhtKSA8IERNX1NFUVVFTlRJQUxfSU9fTUlSUk9SX0xJTUlU KSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gdGVtcF9kaXN0YW5jZTsK ICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3QgPSBtOworICAgICAgICAgICAgICAgICAg ICAgICAgcHJlZmVyX290aGVyX21pcnJvciA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg ICAgUFJJTlRLKCJDaG9vc2luZyBtaXJyb3I6ICVsbHUgJWxsdSAlZDogc2VsZWN0ZWQgJXBcbiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNl Y3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9u ZykgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIHVwZGF0ZV9y ZWFkX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSk7CiAgICAgICAgICAg ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8qIFRPRE86IGFsc28gdHJhY2sgd2hlcmUgSU8n cyBoYXZlIGNvbXBsZXRlZCBhZ2FpbnN0OiB0cmFja2luZyBzdWJtaXRzCkBAIC00ODAsOCArNTE5 LDExIEBAIHN0YXRpYyBzdHJ1Y3QgbWlycm9yICpjaG9vc2VfbWlycm9yKHN0cnVjdCBtaXJyb3Jf c2V0ICptcywgc2VjdG9yX3Qgc2VjdG9yLCBzZWN0CiAgICAgICAgICAqIHRhZ2dpbmcgLSBpZiB3 ZSBrbm93IHdoZXJlIHRoZSBkaXNrIGlzIGFmdGVyIGVpdGhlciBhIHdyaXRlIG9yIGEKICAgICAg ICAgICogcmVhZCB3ZSBjYW4gZGlzcGF0Y2ggbmVhcmVyIGl0LgogICAgICAgICAgKi8KLSAgICAg ICAgaWYgKGxpa2VseSh1cGRhdGVfcmVhZF9wb3MpKQorICAgICAgICBpZiAobGlrZWx5KHVwZGF0 ZV9yZWFkX3BvcykpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdC0+bGFzdF9yZWFkX3Bv c2l0aW9uICE9IHNlY3RvcikKKyAgICAgICAgICAgICAgICAgICAgY2xvc2VzdC0+c2VxdWVudGlh bF9pb19zdGFydF9wb3NpdGlvbiA9IHNlY3RvcjsKICAgICAgICAgICAgICAgICBjbG9zZXN0LT5s YXN0X3JlYWRfcG9zaXRpb24gPSBzZWN0b3IgKyBjb3VudDsKKyAgICAgICAgfQogICAgICAgICBy ZXR1cm4gY2xvc2VzdDsKIH0KIApAQCAtMTAwOSw2ICsxMDUxLDcgQEAgc3RhdGljIGludCBnZXRf bWlycm9yKHN0cnVjdCBtaXJyb3Jfc2V0ICptcywgc3RydWN0IGRtX3RhcmdldCAqdGksCiAJbXMt Pm1pcnJvclttaXJyb3JdLmVycm9yX3R5cGUgPSAwOwogCW1zLT5taXJyb3JbbWlycm9yXS5vZmZz ZXQgPSBvZmZzZXQ7CiAJbXMtPm1pcnJvclttaXJyb3JdLmxhc3RfcmVhZF9wb3NpdGlvbiA9IDA7 CisJbXMtPm1pcnJvclttaXJyb3JdLnNlcXVlbnRpYWxfaW9fc3RhcnRfcG9zaXRpb24gPSAwOwog CiAJcmV0dXJuIDA7CiB9Ci0tIAoxLjcuOS41Cgo= --e89a8fb202a0a3b27104c1af18cf Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline --e89a8fb202a0a3b27104c1af18cf--