From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Disseldorp Subject: [PATCH] Ceph RADOS cluster mutex helper for Samba CTDB Date: Thu, 1 Dec 2016 15:17:15 +0100 Message-ID: <20161201151715.019228c1@suse.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/XJKzg.mnyo0P.jCCFY2crPN" Return-path: Received: from mx2.suse.de ([195.135.220.15]:39463 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754166AbcLAORT (ORCPT ); Thu, 1 Dec 2016 09:17:19 -0500 Sender: ceph-devel-owner@vger.kernel.org List-ID: To: Samba Technical Cc: "ceph-devel@vger.kernel.org" , Martin Schwenke --MP_/XJKzg.mnyo0P.jCCFY2crPN Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, The attached patch-set implements a cluster mutex helper for Samba CTDB using Ceph librados. ctdb_mutex_ceph_rados_helper_lock can be used as a recovery lock provider for CTDB. When configured, split brain avoidance during CTDB recovery will be handled using locks against an object located in a Ceph RADOS pool. I've also attached a standalone test script - @Martin: does this belong in the ctdb test suite, or can I just commit it as a standalone test? It has a few non-standard dependencies: a running Ceph cluster, the rados and jq binaries. Feedback appreciated. Cheers, David -- ctdb/doc/Makefile | 3 +- ctdb/doc/ctdb_mutex_ceph_rados_helper.7.xml | 90 ++++++ ctdb/tools/ctdb_mutex_ceph_rados_helper.c | 334 ++++++++++++++++++++ ctdb/wscript | 19 ++ 4 files changed, 445 insertions(+), 1 deletion(-) --MP_/XJKzg.mnyo0P.jCCFY2crPN Content-Type: text/x-patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=ctdb_reclock_ceph.patchset RnJvbSA0N2U2NTMzNzMwNzNmMTU2NDg0NDQ2NWViNDE2Y2RlYmIxZGM0YWE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogRGF2aWQgRGlzc2VsZG9ycCA8ZGRpc3NAc2FtYmEub3JnPg0K RGF0ZTogVGh1LCAxIERlYyAyMDE2IDEzOjMzOjIyICswMTAwDQpTdWJqZWN0OiBbUEFUQ0ggMS8y XSBjdGRiOiBjbHVzdGVyIG11dGV4IGhlbHBlciB1c2luZyBDZXBoIFJBRE9TDQoNCmN0ZGJfbXV0 ZXhfY2VwaF9yYWRvc19oZWxwZXIgaW1wbGVtZW50cyB0aGUgY2x1c3RlciBtdXRleCBoZWxwZXIg QVBJDQphdG9wIENlcGggdXNpbmcgdGhlIGxpYnJhZG9zIHJhZG9zX2xvY2tfZXhjbHVzaXZlKCkv cmFkb3NfdW5sb2NrKCkNCmZ1bmN0aW9uYWxpdHkuDQoNCk9uY2UgY29uZmlndXJlZCwgc3BsaXQg YnJhaW4gYXZvaWRhbmNlIGR1cmluZyBDVERCIHJlY292ZXJ5IHdpbGwgYmUNCmhhbmRsZWQgdXNp bmcgbG9ja3MgYWdhaW5zdCBhbiBvYmplY3QgbG9jYXRlZCBpbiBhIENlcGggUkFET1MgcG9vbC4N Cg0KU2lnbmVkLW9mZi1ieTogRGF2aWQgRGlzc2VsZG9ycCA8ZGRpc3NAc2FtYmEub3JnPg0KLS0t DQogY3RkYi90b29scy9jdGRiX211dGV4X2NlcGhfcmFkb3NfaGVscGVyLmMgfCAzMzQgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrDQogY3RkYi93c2NyaXB0ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgMTkgKysNCiAyIGZpbGVzIGNoYW5nZWQsIDM1MyBpbnNlcnRpb25zKCsp DQogY3JlYXRlIG1vZGUgMTAwNjQ0IGN0ZGIvdG9vbHMvY3RkYl9tdXRleF9jZXBoX3JhZG9zX2hl bHBlci5jDQoNCmRpZmYgLS1naXQgYS9jdGRiL3Rvb2xzL2N0ZGJfbXV0ZXhfY2VwaF9yYWRvc19o ZWxwZXIuYyBiL2N0ZGIvdG9vbHMvY3RkYl9tdXRleF9jZXBoX3JhZG9zX2hlbHBlci5jDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uOGQxOTk2NQ0KLS0tIC9kZXYvbnVsbA0K KysrIGIvY3RkYi90b29scy9jdGRiX211dGV4X2NlcGhfcmFkb3NfaGVscGVyLmMNCkBAIC0wLDAg KzEsMzM0IEBADQorLyoNCisgICBDVERCIG11dGV4IGhlbHBlciB1c2luZyBDZXBoIGxpYnJhZG9z IGxvY2tzDQorDQorICAgQ29weXJpZ2h0IChDKSBEYXZpZCBEaXNzZWxkb3JwIDIwMTYNCisNCisg ICBCYXNlZCBvbiBjdGRiX211dGV4X2ZjbnRsX2hlbHBlci5jLCB3aGljaCBpczoNCisgICBDb3B5 cmlnaHQgKEMpIE1hcnRpbiBTY2h3ZW5rZSAyMDE1DQorDQorICAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQ0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yDQorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4NCisNCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQor ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4NCisqLw0KKw0KKyNpbmNsdWRlICJyZXBsYWNlLmgiDQorI2luY2x1ZGUg InN5c3RlbS9maWxlc3lzLmgiDQorI2luY2x1ZGUgInN5c3RlbS9uZXR3b3JrLmgiDQorDQorLyog cHJvdG9jb2wuaCBpcyBqdXN0IG5lZWRlZCBmb3IgY3RkYl9zb2NrX2FkZHIsIHdoaWNoIGlzIHVz ZWQgaW4gc3lzdGVtLmggKi8NCisjaW5jbHVkZSAicHJvdG9jb2wvcHJvdG9jb2wuaCINCisjaW5j bHVkZSAiY29tbW9uL3N5c3RlbS5oIg0KKyNpbmNsdWRlICJsaWIvdXRpbC90aW1lLmgiDQorI2lu Y2x1ZGUgInRldmVudC5oIg0KKyNpbmNsdWRlICJ0YWxsb2MuaCINCisjaW5jbHVkZSAicmFkb3Mv bGlicmFkb3MuaCINCisNCisjZGVmaW5lIENUREJfTVVURVhfQ0VQSF9MT0NLX05BTUUJImN0ZGJf cmVjbG9ja19tdXRleCINCisjZGVmaW5lIENUREJfTVVURVhfQ0VQSF9MT0NLX0NPT0tJRQlDVERC X01VVEVYX0NFUEhfTE9DS19OQU1FDQorI2RlZmluZSBDVERCX01VVEVYX0NFUEhfTE9DS19ERVND CSJDVERCIHJlY292ZXJ5IGxvY2siDQorDQorI2RlZmluZSBDVERCX01VVEVYX1NUQVRVU19IT0xE SU5HICIwIg0KKyNkZWZpbmUgQ1REQl9NVVRFWF9TVEFUVVNfQ09OVEVOREVEICIxIg0KKyNkZWZp bmUgQ1REQl9NVVRFWF9TVEFUVVNfVElNRU9VVCAiMiINCisjZGVmaW5lIENUREJfTVVURVhfU1RB VFVTX0VSUk9SICIzIg0KKw0KK3N0YXRpYyBjaGFyICpwcm9nbmFtZSA9IE5VTEw7DQorDQorc3Rh dGljIGludCBjdGRiX211dGV4X3JhZG9zX2N0eF9jcmVhdGUoY29uc3QgY2hhciAqY2VwaF9jbHVz dGVyX25hbWUsDQorCQkJCSAgICAgICBjb25zdCBjaGFyICpjZXBoX2F1dGhfbmFtZSwNCisJCQkJ ICAgICAgIGNvbnN0IGNoYXIgKnBvb2xfbmFtZSwNCisJCQkJICAgICAgIHJhZG9zX3QgKl9jZXBo X2NsdXN0ZXIsDQorCQkJCSAgICAgICByYWRvc19pb2N0eF90ICpfaW9jdHgpDQorew0KKwlyYWRv c190IGNlcGhfY2x1c3RlciA9IE5VTEw7DQorCXJhZG9zX2lvY3R4X3QgaW9jdHggPSBOVUxMOw0K KwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSByYWRvc19jcmVhdGUyKCZjZXBoX2NsdXN0ZXIsIGNlcGhf Y2x1c3Rlcl9uYW1lLCBjZXBoX2F1dGhfbmFtZSwgMCk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlm cHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gaW5pdGlhbGlzZSBDZXBoIGNsdXN0ZXIgJXMg YXMgJXMiDQorCQkJIiAtICglcylcbiIsIHByb2duYW1lLCBjZXBoX2NsdXN0ZXJfbmFtZSwgY2Vw aF9hdXRoX25hbWUsDQorCQkJc3RyZXJyb3IoLXJldCkpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0K Kw0KKwkvKiBwYXRoPU5VTEwgdGVsbHMgbGlicmFkb3MgdG8gdXNlIGRlZmF1bHQgbG9jYXRpb25z ICovDQorCXJldCA9IHJhZG9zX2NvbmZfcmVhZF9maWxlKGNlcGhfY2x1c3RlciwgTlVMTCk7DQor CWlmIChyZXQgPCAwKSB7DQorCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gcGFyc2Ug Q2VwaCBjbHVzdGVyIGNvbmZpZyINCisJCQkiIC0gKCVzKVxuIiwgcHJvZ25hbWUsIHN0cmVycm9y KC1yZXQpKTsNCisJCXJhZG9zX3NodXRkb3duKGNlcGhfY2x1c3Rlcik7DQorCQlyZXR1cm4gcmV0 Ow0KKwl9DQorDQorCXJldCA9IHJhZG9zX2Nvbm5lY3QoY2VwaF9jbHVzdGVyKTsNCisJaWYgKHJl dCA8IDApIHsNCisJCWZwcmludGYoc3RkZXJyLCAiJXM6IGZhaWxlZCB0byBjb25uZWN0IHRvIENl cGggY2x1c3RlciAlcyBhcyAlcyINCisJCQkiIC0gKCVzKVxuIiwgcHJvZ25hbWUsIGNlcGhfY2x1 c3Rlcl9uYW1lLCBjZXBoX2F1dGhfbmFtZSwNCisJCQlzdHJlcnJvcigtcmV0KSk7DQorCQlyYWRv c19zaHV0ZG93bihjZXBoX2NsdXN0ZXIpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKw0KKwly ZXQgPSByYWRvc19pb2N0eF9jcmVhdGUoY2VwaF9jbHVzdGVyLCBwb29sX25hbWUsICZpb2N0eCk7 DQorCWlmIChyZXQgPCAwKSB7DQorCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gY3Jl YXRlIENlcGggaW9jdHggZm9yIHBvb2wgJXMiDQorCQkJIiAtICglcylcbiIsIHByb2duYW1lLCBw b29sX25hbWUsIHN0cmVycm9yKC1yZXQpKTsNCisJCXJhZG9zX3NodXRkb3duKGNlcGhfY2x1c3Rl cik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCSpfY2VwaF9jbHVzdGVyID0gY2VwaF9jbHVz dGVyOw0KKwkqX2lvY3R4ID0gaW9jdHg7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg dm9pZCBjdGRiX211dGV4X3JhZG9zX2N0eF9kZXN0cm95KHJhZG9zX3QgY2VwaF9jbHVzdGVyLA0K KwkJCQkJIHJhZG9zX2lvY3R4X3QgaW9jdHgpDQorew0KKwlyYWRvc19pb2N0eF9kZXN0cm95KGlv Y3R4KTsNCisJcmFkb3Nfc2h1dGRvd24oY2VwaF9jbHVzdGVyKTsNCit9DQorDQorc3RhdGljIGlu dCBjdGRiX211dGV4X3JhZG9zX2xvY2socmFkb3NfaW9jdHhfdCAqaW9jdHgsDQorCQkJCSBjb25z dCBjaGFyICpvaWQpDQorew0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSByYWRvc19sb2NrX2V4Y2x1 c2l2ZShpb2N0eCwgb2lkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1RE Ql9NVVRFWF9DRVBIX0xPQ0tfTkFNRSwNCisJCQkJICAgQ1REQl9NVVRFWF9DRVBIX0xPQ0tfQ09P S0lFLA0KKwkJCQkgICBDVERCX01VVEVYX0NFUEhfTE9DS19ERVNDLA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogaW5maW5pdGUgZHVyYXRpb24gKi8NCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOw0KKwlpZiAoKHJldCA9PSAtRUVYSVNU KSB8fCAocmV0ID09IC1FQlVTWSkpIHsNCisJCS8qIGxvY2sgY29udGVudGlvbiAqLw0KKwkJcmV0 dXJuIHJldDsNCisJfSBlbHNlIGlmIChyZXQgPCAwKSB7DQorCQkvKiB1bmV4cGVjdGVkIGZhaWx1 cmUgKi8NCisJCWZwcmludGYoc3RkZXJyLA0KKwkJCSIlczogRmFpbGVkIHRvIGdldCBsb2NrIG9u IFJBRE9TIG9iamVjdCAnJXMnIC0gKCVzKVxuIiwNCisJCQlwcm9nbmFtZSwgb2lkLCBzdHJlcnJv cigtcmV0KSk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCS8qIGxvY2sgb2J0YWluZWQgKi8N CisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgY3RkYl9tdXRleF9yYWRvc191bmxvY2so cmFkb3NfaW9jdHhfdCAqaW9jdHgsDQorCQkJCSAgIGNvbnN0IGNoYXIgKm9pZCkNCit7DQorCWlu dCByZXQ7DQorDQorCXJldCA9IHJhZG9zX3VubG9jayhpb2N0eCwgb2lkLA0KKwkJCSAgIENUREJf TVVURVhfQ0VQSF9MT0NLX05BTUUsDQorCQkJICAgQ1REQl9NVVRFWF9DRVBIX0xPQ0tfQ09PS0lF KTsNCisJaWYgKHJldCA8IDApIHsNCisJCWZwcmludGYoc3RkZXJyLA0KKwkJCSIlczogRmFpbGVk IHRvIGRyb3AgbG9jayBvbiBSQURPUyBvYmplY3QgJyVzJyAtICglcylcbiIsDQorCQkJcHJvZ25h bWUsIG9pZCwgc3RyZXJyb3IoLXJldCkpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXR1 cm4gMDsNCit9DQorDQorc3RydWN0IGN0ZGJfbXV0ZXhfcmFkb3Nfc3RhdGUgew0KKwlib29sIGhv bGRpbmdfbXV0ZXg7DQorCWNvbnN0IGNoYXIgKmNlcGhfY2x1c3Rlcl9uYW1lOw0KKwljb25zdCBj aGFyICpjZXBoX2F1dGhfbmFtZTsNCisJY29uc3QgY2hhciAqcG9vbF9uYW1lOw0KKwljb25zdCBj aGFyICpvYmplY3Q7DQorCWludCBwcGlkOw0KKwlzdHJ1Y3QgdGV2ZW50X2NvbnRleHQgKmV2Ow0K KwlzdHJ1Y3QgdGV2ZW50X3NpZ25hbCAqc2lnX2V2Ow0KKwlzdHJ1Y3QgdGV2ZW50X3RpbWVyICp0 aW1lcl9ldjsNCisJcmFkb3NfdCBjZXBoX2NsdXN0ZXI7DQorCXJhZG9zX2lvY3R4X3QgaW9jdHg7 DQorfTsNCisNCitzdGF0aWMgdm9pZCBjdGRiX211dGV4X3JhZG9zX3NpZ3Rlcm1fY2Ioc3RydWN0 IHRldmVudF9jb250ZXh0ICpldiwNCisJCQkJCXN0cnVjdCB0ZXZlbnRfc2lnbmFsICpzZSwNCisJ CQkJCWludCBzaWdudW0sDQorCQkJCQlpbnQgY291bnQsDQorCQkJCQl2b2lkICpzaWdpbmZvLA0K KwkJCQkJdm9pZCAqcHJpdmF0ZV9kYXRhKQ0KK3sNCisJc3RydWN0IGN0ZGJfbXV0ZXhfcmFkb3Nf c3RhdGUgKmNtcl9zdGF0ZSA9IHByaXZhdGVfZGF0YTsNCisJaW50IHJldDsNCisNCisJaWYgKCFj bXJfc3RhdGUtPmhvbGRpbmdfbXV0ZXgpIHsNCisJCWZwcmludGYoc3RkZXJyLCAiU2lndGVybSBj YWxsYmFjayBpbnZva2VkIHdpdGhvdXQgbXV0ZXghXG4iKTsNCisJCXJldCA9IC1FSU5WQUw7DQor CQlnb3RvIGVycl9jdHhfY2xlYW51cDsNCisJfQ0KKw0KKwlyZXQgPSBjdGRiX211dGV4X3JhZG9z X3VubG9jayhjbXJfc3RhdGUtPmlvY3R4LCBjbXJfc3RhdGUtPm9iamVjdCk7DQorZXJyX2N0eF9j bGVhbnVwOg0KKwljdGRiX211dGV4X3JhZG9zX2N0eF9kZXN0cm95KGNtcl9zdGF0ZS0+Y2VwaF9j bHVzdGVyLA0KKwkJCQkgICAgIGNtcl9zdGF0ZS0+aW9jdHgpOw0KKwl0YWxsb2NfZnJlZShjbXJf c3RhdGUpOw0KKwlleGl0KHJldCA/IDEgOiAwKTsNCit9DQorDQorc3RhdGljIHZvaWQgY3RkYl9t dXRleF9yYWRvc190aW1lcl9jYihzdHJ1Y3QgdGV2ZW50X2NvbnRleHQgKmV2LA0KKwkJCQkgICAg ICBzdHJ1Y3QgdGV2ZW50X3RpbWVyICp0ZSwNCisJCQkJICAgICAgc3RydWN0IHRpbWV2YWwgY3Vy cmVudF90aW1lLA0KKwkJCQkgICAgICB2b2lkICpwcml2YXRlX2RhdGEpDQorew0KKwlzdHJ1Y3Qg Y3RkYl9tdXRleF9yYWRvc19zdGF0ZSAqY21yX3N0YXRlID0gcHJpdmF0ZV9kYXRhOw0KKwlpbnQg cmV0Ow0KKw0KKwlpZiAoIWNtcl9zdGF0ZS0+aG9sZGluZ19tdXRleCkgew0KKwkJZnByaW50Zihz dGRlcnIsICJUaW1lciBjYWxsYmFjayBpbnZva2VkIHdpdGhvdXQgbXV0ZXghXG4iKTsNCisJCXJl dCA9IC1FSU5WQUw7DQorCQlnb3RvIGVycl9jdHhfY2xlYW51cDsNCisJfQ0KKw0KKwlpZiAoKGtp bGwoY21yX3N0YXRlLT5wcGlkLCAwKSA9PSAwKSB8fCAoZXJybm8gIT0gRVNSQ0gpKSB7DQorCQkv KiBwYXJlbnQgc3RpbGwgYXJvdW5kLCBrZWVwIHdhaXRpbmcgKi8NCisJCWNtcl9zdGF0ZS0+dGlt ZXJfZXYgPSB0ZXZlbnRfYWRkX3RpbWVyKGNtcl9zdGF0ZS0+ZXYsIGNtcl9zdGF0ZSwNCisJCQkJ CQkgICAgICAgdGltZXZhbF9jdXJyZW50X29mcyg1LDApLA0KKwkJCQkJCSAgICAgIGN0ZGJfbXV0 ZXhfcmFkb3NfdGltZXJfY2IsDQorCQkJCQkJICAgICAgIGNtcl9zdGF0ZSk7DQorCQlpZiAoY21y X3N0YXRlLT50aW1lcl9ldiA9PSBOVUxMKSB7DQorCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQg dG8gY3JlYXRlIHRpbWVyIGV2ZW50XG4iKTsNCisJCQkvKiByZWx5IG9uIHNpZ25hbCBjYiAqLw0K KwkJfQ0KKwkJcmV0dXJuOw0KKwl9DQorDQorCS8qIHBhcmVudCBlbmRlZCwgZHJvcCBsb2NrIGFu ZCBleGl0ICovDQorCXJldCA9IGN0ZGJfbXV0ZXhfcmFkb3NfdW5sb2NrKGNtcl9zdGF0ZS0+aW9j dHgsIGNtcl9zdGF0ZS0+b2JqZWN0KTsNCitlcnJfY3R4X2NsZWFudXA6DQorCWN0ZGJfbXV0ZXhf cmFkb3NfY3R4X2Rlc3Ryb3koY21yX3N0YXRlLT5jZXBoX2NsdXN0ZXIsDQorCQkJCSAgICAgY21y X3N0YXRlLT5pb2N0eCk7DQorCXRhbGxvY19mcmVlKGNtcl9zdGF0ZSk7DQorCWV4aXQocmV0ID8g MSA6IDApOw0KK30NCisNCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KK3sNCisJ aW50IHJldDsNCisJc3RydWN0IGN0ZGJfbXV0ZXhfcmFkb3Nfc3RhdGUgKmNtcl9zdGF0ZTsNCisN CisJcHJvZ25hbWUgPSBhcmd2WzBdOw0KKw0KKwlpZiAoYXJnYyAhPSA1KSB7DQorCQlmcHJpbnRm KHN0ZGVyciwgIlVzYWdlOiAlcyA8Q2VwaCBDbHVzdGVyPiA8Q2VwaCB1c2VyPiAiDQorCQkJCSI8 UkFET1MgcG9vbD4gPFJBRE9TIG9iamVjdD5cbiIsDQorCQkJcHJvZ25hbWUpOw0KKwkJcmV0ID0g LUVJTlZBTDsNCisJCWdvdG8gZXJyX291dDsNCisJfQ0KKw0KKwlyZXQgPSBzZXR2YnVmKHN0ZG91 dCwgTlVMTCwgX0lPTkJGLCAwKTsNCisJaWYgKHJldCAhPSAwKSB7DQorCQlmcHJpbnRmKHN0ZGVy ciwgIkZhaWxlZCB0byBjb25maWd1cmUgdW5idWZmZXJlZCBzdGRvdXQgSS9PXG4iKTsNCisJfQ0K Kw0KKwljbXJfc3RhdGUgPSB0YWxsb2NfemVybyhOVUxMLCBzdHJ1Y3QgY3RkYl9tdXRleF9yYWRv c19zdGF0ZSk7DQorCWlmIChjbXJfc3RhdGUgPT0gTlVMTCkgew0KKwkJZnByaW50ZihzdGRvdXQs IENUREJfTVVURVhfU1RBVFVTX0VSUk9SKTsNCisJCXJldCA9IC1FTk9NRU07DQorCQlnb3RvIGVy cl9vdXQ7DQorCX0NCisNCisJY21yX3N0YXRlLT5jZXBoX2NsdXN0ZXJfbmFtZSA9IGFyZ3ZbMV07 DQorCWNtcl9zdGF0ZS0+Y2VwaF9hdXRoX25hbWUgPSBhcmd2WzJdOw0KKwljbXJfc3RhdGUtPnBv b2xfbmFtZSA9IGFyZ3ZbM107DQorCWNtcl9zdGF0ZS0+b2JqZWN0ID0gYXJndls0XTsNCisNCisJ Y21yX3N0YXRlLT5wcGlkID0gZ2V0cHBpZCgpOw0KKwlpZiAoY21yX3N0YXRlLT5wcGlkID09IDEp IHsNCisJCS8qDQorCQkgKiBUaGUgb3JpZ2luYWwgcGFyZW50IGlzIGdvbmUgYW5kIHRoZSBwcm9j ZXNzIGhhcw0KKwkJICogYmVlbiByZXBhcmVudGVkIHRvIGluaXQuICBUaGlzIGNhbiBoYXBwZW4g aWYgdGhlDQorCQkgKiBoZWxwZXIgaXMgc3RhcnRlZCBqdXN0IGFzIHRoZSBwYXJlbnQgaXMga2ls bGVkDQorCQkgKiBkdXJpbmcgc2h1dGRvd24uICBUaGUgZXJyb3IgbWVzc2FnZSBkb2Vzbid0IG5l ZWQgdG8NCisJCSAqIGJlIHN0ZWxsYXIsIHNpbmNlIHRoZXJlIHdvbid0IGJlIGFueXRoaW5nIGFy b3VuZCB0bw0KKwkJICogY2FwdHVyZSBhbmQgbG9nIGl0Li4uDQorCQkgKi8NCisJCWZwcmludGYo c3RkZXJyLCAiJXM6IFBQSUQgPT0gMVxuIiwgcHJvZ25hbWUpOw0KKwkJcmV0ID0gLUVQSVBFOw0K KwkJZ290byBlcnJfc3RhdGVfZnJlZTsNCisJfQ0KKw0KKwljbXJfc3RhdGUtPmV2ID0gdGV2ZW50 X2NvbnRleHRfaW5pdChjbXJfc3RhdGUpOw0KKwlpZiAoY21yX3N0YXRlLT5ldiA9PSBOVUxMKSB7 DQorCQlmcHJpbnRmKHN0ZGVyciwgInRldmVudF9jb250ZXh0X2luaXQgZmFpbGVkXG4iKTsNCisJ CWZwcmludGYoc3Rkb3V0LCBDVERCX01VVEVYX1NUQVRVU19FUlJPUik7DQorCQlyZXQgPSAtRU5P TUVNOw0KKwkJZ290byBlcnJfc3RhdGVfZnJlZTsNCisJfQ0KKw0KKwkvKiB3YWl0IGZvciBzaWd0 ZXJtICovDQorCWNtcl9zdGF0ZS0+c2lnX2V2ID0gdGV2ZW50X2FkZF9zaWduYWwoY21yX3N0YXRl LT5ldiwgY21yX3N0YXRlLCBTSUdURVJNLCAwLA0KKwkJCQkJICAgICAgY3RkYl9tdXRleF9yYWRv c19zaWd0ZXJtX2NiLA0KKwkJCQkJICAgICAgY21yX3N0YXRlKTsNCisJaWYgKGNtcl9zdGF0ZS0+ c2lnX2V2ID09IE5VTEwpIHsNCisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNyZWF0ZSBz aWduYWwgZXZlbnRcbiIpOw0KKwkJZnByaW50ZihzdGRvdXQsIENUREJfTVVURVhfU1RBVFVTX0VS Uk9SKTsNCisJCXJldCA9IC1FTk9NRU07DQorCQlnb3RvIGVycl9zdGF0ZV9mcmVlOw0KKwl9DQor DQorCS8qIHBlcmlvZGljYWxseSBjaGVjayBwYXJlbnQgKi8NCisJY21yX3N0YXRlLT50aW1lcl9l diA9IHRldmVudF9hZGRfdGltZXIoY21yX3N0YXRlLT5ldiwgY21yX3N0YXRlLA0KKwkJCQkJICAg ICAgIHRpbWV2YWxfY3VycmVudF9vZnMoNSwwKSwNCisJCQkJCSAgICAgICBjdGRiX211dGV4X3Jh ZG9zX3RpbWVyX2NiLA0KKwkJCQkJICAgICAgIGNtcl9zdGF0ZSk7DQorCWlmIChjbXJfc3RhdGUt PnRpbWVyX2V2ID09IE5VTEwpIHsNCisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNyZWF0 ZSB0aW1lciBldmVudFxuIik7DQorCQlmcHJpbnRmKHN0ZG91dCwgQ1REQl9NVVRFWF9TVEFUVVNf RVJST1IpOw0KKwkJcmV0ID0gLUVOT01FTTsNCisJCWdvdG8gZXJyX3N0YXRlX2ZyZWU7DQorCX0N CisNCisJcmV0ID0gY3RkYl9tdXRleF9yYWRvc19jdHhfY3JlYXRlKGNtcl9zdGF0ZS0+Y2VwaF9j bHVzdGVyX25hbWUsDQorCQkJCQkgIGNtcl9zdGF0ZS0+Y2VwaF9hdXRoX25hbWUsDQorCQkJCQkg IGNtcl9zdGF0ZS0+cG9vbF9uYW1lLA0KKwkJCQkJICAmY21yX3N0YXRlLT5jZXBoX2NsdXN0ZXIs DQorCQkJCQkgICZjbXJfc3RhdGUtPmlvY3R4KTsNCisJaWYgKHJldCA8IDApIHsNCisJCWZwcmlu dGYoc3Rkb3V0LCBDVERCX01VVEVYX1NUQVRVU19FUlJPUik7DQorCQlnb3RvIGVycl9zdGF0ZV9m cmVlOw0KKwl9DQorDQorCXJldCA9IGN0ZGJfbXV0ZXhfcmFkb3NfbG9jayhjbXJfc3RhdGUtPmlv Y3R4LCBjbXJfc3RhdGUtPm9iamVjdCk7DQorCWlmICgocmV0ID09IC1FRVhJU1QpIHx8IChyZXQg PT0gLUVCVVNZKSkgew0KKwkJZnByaW50ZihzdGRvdXQsIENUREJfTVVURVhfU1RBVFVTX0NPTlRF TkRFRCk7DQorCQlnb3RvIGVycl9jdHhfY2xlYW51cDsNCisJfSBlbHNlIGlmIChyZXQgPCAwKSB7 DQorCQlmcHJpbnRmKHN0ZG91dCwgQ1REQl9NVVRFWF9TVEFUVVNfRVJST1IpOw0KKwkJZ290byBl cnJfY3R4X2NsZWFudXA7DQorCX0NCisNCisJY21yX3N0YXRlLT5ob2xkaW5nX211dGV4ID0gdHJ1 ZTsNCisJZnByaW50ZihzdGRvdXQsIENUREJfTVVURVhfU1RBVFVTX0hPTERJTkcpOw0KKw0KKwkv KiB3YWl0IGZvciB0aGUgc2lnbmFsIC8gdGltZXIgZXZlbnRzIHRvIGRvIHRoZWlyIHdvcmsgKi8N CisJcmV0ID0gdGV2ZW50X2xvb3Bfd2FpdChjbXJfc3RhdGUtPmV2KTsNCisJaWYgKHJldCA8IDAp IHsNCisJCWdvdG8gZXJyX2N0eF9jbGVhbnVwOw0KKwl9DQorZXJyX2N0eF9jbGVhbnVwOg0KKwlj dGRiX211dGV4X3JhZG9zX2N0eF9kZXN0cm95KGNtcl9zdGF0ZS0+Y2VwaF9jbHVzdGVyLA0KKwkJ CQkgICAgIGNtcl9zdGF0ZS0+aW9jdHgpOw0KK2Vycl9zdGF0ZV9mcmVlOg0KKwl0YWxsb2NfZnJl ZShjbXJfc3RhdGUpOw0KK2Vycl9vdXQ6DQorCXJldHVybiByZXQgPyAxIDogMDsNCit9DQpkaWZm IC0tZ2l0IGEvY3RkYi93c2NyaXB0IGIvY3RkYi93c2NyaXB0DQppbmRleCBmNGJjY2VmLi43NWRk ZWUyIDEwMDY0NA0KLS0tIGEvY3RkYi93c2NyaXB0DQorKysgYi9jdGRiL3dzY3JpcHQNCkBAIC02 OSw2ICs2OSw5IEBAIGRlZiBzZXRfb3B0aW9ucyhvcHQpOg0KICAgICBvcHQuYWRkX29wdGlvbign LS1lbmFibGUtcG1kYScsDQogICAgICAgICAgICAgICAgICAgIGhlbHA9KCJUdXJuIG9uIFBDUCBw bWRhIHN1cHBvcnQgKGRlZmF1bHQ9bm8pIiksDQogICAgICAgICAgICAgICAgICAgIGFjdGlvbj0i c3RvcmVfdHJ1ZSIsIGRlc3Q9J2N0ZGJfcG1kYScsIGRlZmF1bHQ9RmFsc2UpDQorICAgIG9wdC5h ZGRfb3B0aW9uKCctLWVuYWJsZS1jZXBoLXJlY2xvY2snLA0KKyAgICAgICAgICAgICAgICAgICBo ZWxwPSgiRW5hYmxlIENlcGggQ1REQiByZWNvdmVyeSBsb2NrIGhlbHBlciAoZGVmYXVsdD1ubyki KSwNCisgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0nY3RkYl9j ZXBoX3JlY2xvY2snLCBkZWZhdWx0PUZhbHNlKQ0KIA0KICAgICBvcHQuYWRkX29wdGlvbignLS13 aXRoLWxvZ2RpcicsDQogICAgICAgICAgICAgICAgICAgIGhlbHA9KCJQYXRoIHRvIGxvZyBkaXJl Y3RvcnkiKSwNCkBAIC0xNTksNiArMTYyLDE1IEBAIGRlZiBjb25maWd1cmUoY29uZik6DQogICAg ICAgICBjb25mLmVudi5DVERCX1BNREFESVIgPSBvcy5wYXRoLmpvaW4oY29uZi5lbnYuTE9DQUxT VEFURURJUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn bGliL3BjcC9wbWRhcy9jdGRiJykNCiANCisgICAgaWYgT3B0aW9ucy5vcHRpb25zLmN0ZGJfY2Vw aF9yZWNsb2NrOg0KKyAgICAgICAgaWYgKGNvbmYuQ0hFQ0tfSEVBREVSUygncmFkb3MvbGlicmFk b3MuaCcsIEZhbHNlLCBGYWxzZSwgJ3JhZG9zJykgYW5kDQorCQkJCQljb25mLkNIRUNLX0xJQign cmFkb3MnLCBzaGxpYj1UcnVlKSk6DQorICAgICAgICAgICAgTG9ncy5pbmZvKCdCdWlsZGluZyB3 aXRoIENlcGggbGlicmFkb3MgcmVjb3ZlcnkgbG9jayBzdXBwb3J0JykNCisgICAgICAgICAgICBj b25mLmRlZmluZSgnSEFWRV9MSUJSQURPUycsIDEpDQorICAgICAgICBlbHNlOg0KKyAgICAgICAg ICAgIExvZ3MuZXJyb3IoIk1pc3NpbmcgbGlicmFkb3MgZm9yIENlcGggcmVjb3ZlcnkgbG9jayBz dXBwb3J0IikNCisgICAgICAgICAgICBzeXMuZXhpdCgxKQ0KKw0KICAgICBoYXZlX2luZmluaWJh bmQgPSBGYWxzZQ0KICAgICBpZiBPcHRpb25zLm9wdGlvbnMuY3RkYl9pbmZpbmliYW5kOg0KICAg ICAgICAgaWJfc3VwcG9ydCA9IFRydWUNCkBAIC01MTcsNiArNTI5LDEzIEBAIGRlZiBidWlsZChi bGQpOg0KICAgICAgICAgYmxkLklOU1RBTExfRklMRVMoJyR7Q1REQl9QTURBRElSfScsICd1dGls cy9wbWRhL1JFQURNRScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0bmFtZT0nUkVB RE1FJykNCiANCisgICAgaWYgYmxkLmVudi5IQVZFX0xJQlJBRE9TOg0KKyAgICAgICAgYmxkLlNB TUJBX0JJTkFSWSgnY3RkYl9tdXRleF9jZXBoX3JhZG9zX2hlbHBlcicsDQorICAgICAgICAgICAg ICAgICAgICAgICAgIHNvdXJjZT0ndG9vbHMvY3RkYl9tdXRleF9jZXBoX3JhZG9zX2hlbHBlci5j JywNCisJCQkgZGVwcz0nY3RkYi1zeXN0ZW0gcmFkb3MnLA0KKwkJCSBpbmNsdWRlcz0naW5jbHVk ZScsDQorCQkJIGluc3RhbGxfcGF0aD0nJHtDVERCX0hFTFBFUl9CSU5ESVJ9JykNCisNCiAgICAg c2VkX2V4cHIxID0gJ3N8L3Vzci9sb2NhbC92YXIvbGliL2N0ZGJ8JXN8ZycgICUgKGJsZC5lbnYu Q1REQl9WQVJESVIpDQogICAgIHNlZF9leHByMiA9ICdzfC91c3IvbG9jYWwvZXRjL2N0ZGJ8JXN8 ZycgICAgICAlIChibGQuZW52LkNUREJfRVRDRElSKQ0KICAgICBzZWRfZXhwcjMgPSAnc3wvdXNy L2xvY2FsL3Zhci9sb2d8JXN8ZycgICAgICAgJSAoYmxkLmVudi5DVERCX0xPR0RJUikNCi0tIA0K Mi4xMC4yDQoNCg0KRnJvbSBmYjUzZjQyZDFlMDJlMGYzM2QxYTEzMDRjN2Q3MDgyMDNkNzVhMTRk IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogRGF2aWQgRGlzc2VsZG9ycCA8ZGRpc3NA c2FtYmEub3JnPg0KRGF0ZTogVGh1LCAxIERlYyAyMDE2IDE0OjIyOjQ1ICswMTAwDQpTdWJqZWN0 OiBbUEFUQ0ggMi8yXSBjdGRiL2RvYzogbWFuIHBhZ2UgZm9yIENlcGggUkFET1MgY2x1c3RlciBt dXRleCBoZWxwZXINCg0KU2lnbmVkLW9mZi1ieTogRGF2aWQgRGlzc2VsZG9ycCA8ZGRpc3NAc2Ft YmEub3JnPg0KLS0tDQogY3RkYi9kb2MvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAzICstDQogY3RkYi9kb2MvY3RkYl9tdXRleF9jZXBoX3JhZG9zX2hlbHBlci43LnhtbCB8 IDkwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogMiBmaWxlcyBjaGFuZ2VkLCA5MiBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGN0ZGIvZG9j L2N0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxwZXIuNy54bWwNCg0KZGlmZiAtLWdpdCBhL2N0ZGIv ZG9jL01ha2VmaWxlIGIvY3RkYi9kb2MvTWFrZWZpbGUNCmluZGV4IGYwZjgyMTUuLjViYmQ3NDgg MTAwNjQ0DQotLS0gYS9jdGRiL2RvYy9NYWtlZmlsZQ0KKysrIGIvY3RkYi9kb2MvTWFrZWZpbGUN CkBAIC04LDcgKzgsOCBAQCBET0NTID0gY3RkYi4xIGN0ZGIuMS5odG1sIFwNCiAJY3RkYmQuY29u Zi41IGN0ZGJkLmNvbmYuNS5odG1sIFwNCiAJY3RkYi43IGN0ZGIuNy5odG1sIFwNCiAJY3RkYi1z dGF0aXN0aWNzLjcgY3RkYi1zdGF0aXN0aWNzLjcuaHRtbCBcDQotCWN0ZGItdHVuYWJsZXMuNyBj dGRiLXR1bmFibGVzLjcuaHRtbA0KKwljdGRiLXR1bmFibGVzLjcgY3RkYi10dW5hYmxlcy43Lmh0 bWwgXA0KKwljdGRiX211dGV4X2NlcGhfcmFkb3NfaGVscGVyLjcgY3RkYl9tdXRleF9jZXBoX3Jh ZG9zX2hlbHBlci43Lmh0bWwNCiANCiBhbGw6ICQoRE9DUykNCiANCmRpZmYgLS1naXQgYS9jdGRi L2RvYy9jdGRiX211dGV4X2NlcGhfcmFkb3NfaGVscGVyLjcueG1sIGIvY3RkYi9kb2MvY3RkYl9t dXRleF9jZXBoX3JhZG9zX2hlbHBlci43LnhtbA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAuLmU1ZGVkYzcNCi0tLSAvZGV2L251bGwNCisrKyBiL2N0ZGIvZG9jL2N0ZGJfbXV0 ZXhfY2VwaF9yYWRvc19oZWxwZXIuNy54bWwNCkBAIC0wLDAgKzEsOTAgQEANCis8P3htbCB2ZXJz aW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1OS0xIj8+DQorPCFET0NUWVBFIHJlZmVudHJ5DQor CVBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC41Ly9FTiINCisJImh0dHA6Ly93 d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC41L2RvY2Jvb2t4LmR0ZCI+DQorPHJlZmVu dHJ5IGlkPSJjdGRiX211dGV4X2NlcGhfcmFkb3NfaGVscGVyLjciPg0KKw0KKyAgPHJlZm1ldGE+ DQorICAgIDxyZWZlbnRyeXRpdGxlPkNlcGggUkFET1MgTXV0ZXg8L3JlZmVudHJ5dGl0bGU+DQor ICAgIDxtYW52b2xudW0+NzwvbWFudm9sbnVtPg0KKyAgICA8cmVmbWlzY2luZm8gY2xhc3M9InNv dXJjZSI+Y3RkYjwvcmVmbWlzY2luZm8+DQorICAgIDxyZWZtaXNjaW5mbyBjbGFzcz0ibWFudWFs Ij5DVERCIC0gY2x1c3RlcmVkIFREQiBkYXRhYmFzZTwvcmVmbWlzY2luZm8+DQorICA8L3JlZm1l dGE+DQorDQorICA8cmVmbmFtZWRpdj4NCisgICAgPHJlZm5hbWU+Y3RkYl9tdXRleF9jZXBoX3Jh ZG9zX2hlbHBlcjwvcmVmbmFtZT4NCisgICAgPHJlZnB1cnBvc2U+Q2VwaCBSQURPUyBjbHVzdGVy IG11dGV4IGhlbHBlcjwvcmVmcHVycG9zZT4NCisgIDwvcmVmbmFtZWRpdj4NCisNCisgIDxyZWZz ZWN0MT4NCisgICAgPHRpdGxlPkRFU0NSSVBUSU9OPC90aXRsZT4NCisgICAgPHBhcmE+DQorICAg ICAgY3RkYl9tdXRleF9jZXBoX3JhZG9zX2hlbHBlcl9sb2NrIGNhbiBiZSB1c2VkIGFzIGEgcmVj b3ZlcnkgbG9jayBwcm92aWRlcg0KKyAgICAgIGZvciBDVERCLiAgV2hlbiBjb25maWd1cmVkLCBz cGxpdCBicmFpbiBhdm9pZGFuY2UgZHVyaW5nIENUREIgcmVjb3ZlcnkNCisgICAgICB3aWxsIGJl IGhhbmRsZWQgdXNpbmcgbG9ja3MgYWdhaW5zdCBhbiBvYmplY3QgbG9jYXRlZCBpbiBhIENlcGgg UkFET1MNCisgICAgICBwb29sLg0KKyAgICAgIFRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHks IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBsaW5lIGluIHlvdXIgQ1REQg0KKyAgICAgIGNvbmZpZyBm aWxlOg0KKyAgICA8L3BhcmE+DQorICAgIDxzY3JlZW4gZm9ybWF0PSJsaW5lc3BlY2lmaWMiPg0K K0NUREJfUkVDT1ZFUllfTE9DSz0iIWN0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxwZXJfbG9jayBb Q2x1c3Rlcl0gW1VzZXJdIFtQb29sXSBbT2JqZWN0XSINCisNCitDbHVzdGVyOiBDZXBoIGNsdXN0 ZXIgbmFtZSAoZS5nLiBjZXBoKQ0KK1VzZXI6IENlcGggY2x1c3RlciB1c2VyIG5hbWUgKGUuZy4g Y2xpZW50LmFkbWluKQ0KK1Bvb2w6IENlcGggUkFET1MgcG9vbCBuYW1lDQorT2JqZWN0OiBDZXBo IFJBRE9TIG9iamVjdCBuYW1lDQorICAgIDwvc2NyZWVuPg0KKyAgICA8cGFyYT4NCisgICAgICBU aGUgQ2VwaCBjbHVzdGVyIDxwYXJhbWV0ZXI+Q2x1c3RlcjwvcGFyYW1ldGVyPiBtdXN0IGJlIHVw IGFuZCBydW5uaW5nLA0KKyAgICAgIHdpdGggYSBjb25maWd1cmF0aW9uLCBhbmQga2V5cmluZyBm aWxlIGZvciA8cGFyYW1ldGVyPlVzZXI8L3BhcmFtZXRlcj4NCisgICAgICBsb2NhdGVkIGluIGEg bGlicmFkb3MgZGVmYXVsdCBzZWFyY2ggcGF0aCAoZS5nLiAvZXRjL2NlcGgvKS4NCisgICAgICA8 cGFyYW1ldGVyPlBvb2w8L3BhcmFtZXRlcj4gbXVzdCBhbHJlYWR5IGV4aXN0Lg0KKyAgICA8L3Bh cmE+DQorICA8L3JlZnNlY3QxPg0KKw0KKyAgPHJlZnNlY3QxPg0KKyAgICA8dGl0bGU+U0VFIEFM U088L3RpdGxlPg0KKyAgICA8cGFyYT4NCisgICAgICA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRp dGxlPmN0ZGI8L3JlZmVudHJ5dGl0bGU+DQorICAgICAgPG1hbnZvbG51bT43PC9tYW52b2xudW0+ PC9jaXRlcmVmZW50cnk+LA0KKw0KKyAgICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+ Y3RkYmQ8L3JlZmVudHJ5dGl0bGU+DQorICAgICAgPG1hbnZvbG51bT4xPC9tYW52b2xudW0+PC9j aXRlcmVmZW50cnk+LA0KKw0KKyAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9jdGRiLnNhbWJhLm9y Zy8iLz4NCisgICAgPC9wYXJhPg0KKyAgPC9yZWZzZWN0MT4NCisNCisgIDxyZWZlbnRyeWluZm8+ DQorICAgIDxhdXRob3I+DQorICAgICAgPGNvbnRyaWI+DQorCVRoaXMgZG9jdW1lbnRhdGlvbiB3 YXMgd3JpdHRlbiBieSBEYXZpZCBEaXNzZWxkb3JwDQorICAgICAgPC9jb250cmliPg0KKyAgICA8 L2F1dGhvcj4NCisNCisgICAgPGNvcHlyaWdodD4NCisgICAgICA8eWVhcj4yMDE2PC95ZWFyPg0K KyAgICAgIDxob2xkZXI+RGF2aWQgRGlzc2VsZG9ycDwvaG9sZGVyPg0KKyAgICA8L2NvcHlyaWdo dD4NCisgICAgPGxlZ2Fsbm90aWNlPg0KKyAgICAgIDxwYXJhPg0KKwlUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorCW1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzDQor CXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mDQorCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLg0KKyAgICAgIDwvcGFyYT4NCisgICAgICA8cGFyYT4NCisJVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQ0KKwl1c2VmdWwsIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkDQorCXdhcnJhbnR5IG9m IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINCisJUFVSUE9TRS4g IFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisg ICAgICA8L3BhcmE+DQorICAgICAgPHBhcmE+DQorCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKwlMaWNlbnNlIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOyBpZiBub3QsIHNlZQ0KKwk8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMiLz4uDQorICAgICAgPC9wYXJhPg0KKyAgICA8L2xlZ2Fsbm90aWNlPg0KKyAgPC9y ZWZlbnRyeWluZm8+DQorDQorPC9yZWZlbnRyeT4NCi0tIA0KMi4xMC4yDQoNCg== --MP_/XJKzg.mnyo0P.jCCFY2crPN Content-Type: application/x-shellscript Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=test_ceph_rados_reclock.sh IyEvYmluL2Jhc2gKIwojIHRlc3QgZm9yIGN0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxwZXIKCkNM VVNURVI9ImNlcGgiClVTRVI9ImNsaWVudC5hZG1pbiIKUE9PTD0icmJkIgpPQkpFQ1Q9ImN0ZGJf cmVjbG9jayIKVE1QX0RJUj0iJChta3RlbXAgLS1kaXJlY3RvcnkpIiB8fCBleGl0IDEKCmZ1bmN0 aW9uIF9mYWlsKCkgewoJZWNobyAiRkFJTEVEOiAkKiIKCWV4aXQgMQp9CgojIHRoaXMgdGVzdCBy ZXF1aXJlcyB0aGUgQ2VwaCAicmFkb3MiIGJpbmFyeSwgYW5kICJqcSIganNvbiBwYXJzZXIKd2hp Y2gganEgPiAvZGV2L251bGwgfHwgZXhpdCAxCndoaWNoIHJhZG9zID4gL2Rldi9udWxsIHx8IGV4 aXQgMQp3aGljaCBjdGRiX211dGV4X2NlcGhfcmFkb3NfaGVscGVyIHx8IGV4aXQgMQoKcmFkb3Mg LXAgIiRQT09MIiBybSAiJE9CSkVDVCIKCihjdGRiX211dGV4X2NlcGhfcmFkb3NfaGVscGVyICIk Q0xVU1RFUiIgIiRVU0VSIiAiJFBPT0wiICIkT0JKRUNUIiBcCgkJCQkJCQk+ICR7VE1QX0RJUn0v Zmlyc3QpICYKbG9ja2VyX3BpZD0kIQoKIyBUT0RPIHdhaXQgZm9yIGN0ZGJfbXV0ZXhfY2VwaF9y YWRvc19oZWxwZXIgdG8gd3JpdGUgb25lIGJ5dGUgdG8gc3Rkb3V0LAojIGluZGljYXRpbmcgbG9j ayBhY3F1aXNpdGlvbiBzdWNjZXNzL2ZhaWx1cmUKc2xlZXAgMQoKZmlyc3Rfb3V0PSQoY2F0ICR7 VE1QX0RJUn0vZmlyc3QpClsgIiRmaXJzdF9vdXQiID09ICIwIiBdIFwKCXx8IF9mYWlsICJleHBl Y3RlZCBsb2NrIGFjcXVpc2l0aW9uICgwKSwgYnV0IGdvdCAkZmlyc3Rfb3V0IgoKcmFkb3MgLXAg IiRQT09MIiBsb2NrIGluZm8gIiRPQkpFQ1QiIGN0ZGJfcmVjbG9ja19tdXRleCBcCgkJCQkJCT4g JHtUTVBfRElSfS9sb2NrX3N0YXRlX2ZpcnN0CgojIGVjaG8gIndpdGggbG9jazogYGNhdCAke1RN UF9ESVJ9L2xvY2tfc3RhdGVfZmlyc3RgIgoKTE9DS19OQU1FPSIkKGpxIC1yICcubmFtZScgJHtU TVBfRElSfS9sb2NrX3N0YXRlX2ZpcnN0KSIKWyAiJExPQ0tfTkFNRSIgPT0gImN0ZGJfcmVjbG9j a19tdXRleCIgXSBcCgl8fCBfZmFpbCAidW5leHBlY3RlZCBsb2NrIG5hbWU6ICRMT0NLX05BTUUi CkxPQ0tfVFlQRT0iJChqcSAtciAnLnR5cGUnICR7VE1QX0RJUn0vbG9ja19zdGF0ZV9maXJzdCki ClsgIiRMT0NLX1RZUEUiID09ICJleGNsdXNpdmUiIF0gXAoJfHwgX2ZhaWwgInVuZXhwZWN0ZWQg bG9jayB0eXBlOiAkTE9DS19UWVBFIgoKTE9DS19DT1VOVD0iJChqcSAtciAnLmxvY2tlcnMgfCBs ZW5ndGgnICR7VE1QX0RJUn0vbG9ja19zdGF0ZV9maXJzdCkiClsgJExPQ0tfQ09VTlQgLWVxIDEg XSB8fCBfZmFpbCAiZXhwZWN0ZWQgMSBsb2NrIGluIHJhZG9zIHN0YXRlLCBnb3QgJExPQ0tfQ09V TlQiCkxPQ0tFUl9DT09LSUU9IiQoanEgLXIgJy5sb2NrZXJzWzBdLmNvb2tpZScgJHtUTVBfRElS fS9sb2NrX3N0YXRlX2ZpcnN0KSIKWyAiJExPQ0tFUl9DT09LSUUiID09ICJjdGRiX3JlY2xvY2tf bXV0ZXgiIF0gXAoJfHwgX2ZhaWwgInVuZXhwZWN0ZWQgbG9ja2VyIGNvb2tpZTogJExPQ0tFUl9D T09LSUUiCkxPQ0tFUl9ERVNDPSIkKGpxIC1yICcubG9ja2Vyc1swXS5kZXNjcmlwdGlvbicgJHtU TVBfRElSfS9sb2NrX3N0YXRlX2ZpcnN0KSIKWyAiJExPQ0tFUl9ERVNDIiA9PSAiQ1REQiByZWNv dmVyeSBsb2NrIiBdIFwKCXx8IF9mYWlsICJ1bmV4cGVjdGVkIGxvY2tlciBkZXNjcmlwdGlvbjog JExPQ0tFUl9ERVNDIgoKIyBzZWNvbmQgYXR0ZW1wdCB3aGlsZSBmaXJzdCBpcyBzdGlsbCBob2xk aW5nIHRoZSBsb2NrIC0gZXhwZWN0IGZhaWx1cmUKY3RkYl9tdXRleF9jZXBoX3JhZG9zX2hlbHBl ciAiJENMVVNURVIiICIkVVNFUiIgIiRQT09MIiAiJE9CSkVDVCIgXAoJCQkJCQkJPiAke1RNUF9E SVJ9L3NlY29uZApzZWNvbmRfb3V0PSQoY2F0ICR7VE1QX0RJUn0vc2Vjb25kKQpbICIkc2Vjb25k X291dCIgPT0gIjEiIF0gXAoJfHwgX2ZhaWwgImV4cGVjdGVkIGxvY2sgY29udGVudGlvbiAoMSks IGJ1dCBnb3QgJHNlY29uZF9vdXQiCgojIGNvbmZpcm0gbG9jayBzdGF0ZSBkaWRuJ3QgY2hhbmdl CnJhZG9zIC1wICIkUE9PTCIgbG9jayBpbmZvICIkT0JKRUNUIiBjdGRiX3JlY2xvY2tfbXV0ZXgg XAoJCQkJCQk+ICR7VE1QX0RJUn0vbG9ja19zdGF0ZV9zZWNvbmQKCmRpZmYgJHtUTVBfRElSfS9s b2NrX3N0YXRlX2ZpcnN0ICR7VE1QX0RJUn0vbG9ja19zdGF0ZV9zZWNvbmQgXAoJCQkJCXx8IF9m YWlsICJ1bmV4cGVjdGVkIGxvY2sgc3RhdGUgY2hhbmdlIgoKIyB0ZWxsIGZpcnN0IGxvY2tlciB0 byBkcm9wIHRoZSBsb2NrIGFuZCB0ZXJtaW5hdGUKa2lsbCAkbG9ja2VyX3BpZCB8fCBleGl0IDEK CndhaXQgJGxvY2tlcl9waWQgJj4gL2Rldi9udWxsCgpyYWRvcyAtcCAiJFBPT0wiIGxvY2sgaW5m byAiJE9CSkVDVCIgY3RkYl9yZWNsb2NrX211dGV4IFwKCQkJCQkJPiAke1RNUF9ESVJ9L2xvY2tf c3RhdGVfdGhpcmQKIyBlY2hvICJ3aXRob3V0IGxvY2s6IGBjYXQgJHtUTVBfRElSfS9sb2NrX3N0 YXRlX3RoaXJkYCIKCkxPQ0tfTkFNRT0iJChqcSAtciAnLm5hbWUnICR7VE1QX0RJUn0vbG9ja19z dGF0ZV90aGlyZCkiClsgIiRMT0NLX05BTUUiID09ICJjdGRiX3JlY2xvY2tfbXV0ZXgiIF0gXAoJ fHwgX2ZhaWwgInVuZXhwZWN0ZWQgbG9jayBuYW1lOiAkTE9DS19OQU1FIgpMT0NLX1RZUEU9IiQo anEgLXIgJy50eXBlJyAke1RNUF9ESVJ9L2xvY2tfc3RhdGVfdGhpcmQpIgpbICIkTE9DS19UWVBF IiA9PSAiZXhjbHVzaXZlIiBdIFwKCXx8IF9mYWlsICJ1bmV4cGVjdGVkIGxvY2sgdHlwZTogJExP Q0tfVFlQRSIKCkxPQ0tfQ09VTlQ9IiQoanEgLXIgJy5sb2NrZXJzIHwgbGVuZ3RoJyAke1RNUF9E SVJ9L2xvY2tfc3RhdGVfdGhpcmQpIgpbICRMT0NLX0NPVU5UIC1lcSAwIF0gXAoJfHwgX2ZhaWwg ImRpZG5cJ3QgZXhwZWN0IGFueSBsb2NrcyBpbiByYWRvcyBzdGF0ZSwgZ290ICRMT0NLX0NPVU5U IgoKZXhlYyA+JHtUTVBfRElSfS90aGlyZCAtLSBjdGRiX211dGV4X2NlcGhfcmFkb3NfaGVscGVy ICIkQ0xVU1RFUiIgIiRVU0VSIiAiJFBPT0wiICIkT0JKRUNUIiAmCmxvY2tlcl9waWQ9JCEKCnNs ZWVwIDEKCnJhZG9zIC1wICIkUE9PTCIgbG9jayBpbmZvICIkT0JKRUNUIiBjdGRiX3JlY2xvY2tf bXV0ZXggXAoJCQkJCQk+ICR7VE1QX0RJUn0vbG9ja19zdGF0ZV9mb3VydGgKIyBlY2hvICJ3aXRo IGxvY2sgYWdhaW46IGBjYXQgJHtUTVBfRElSfS9sb2NrX3N0YXRlX2ZvdXJ0aGAiCgpMT0NLX05B TUU9IiQoanEgLXIgJy5uYW1lJyAke1RNUF9ESVJ9L2xvY2tfc3RhdGVfZm91cnRoKSIKWyAiJExP Q0tfTkFNRSIgPT0gImN0ZGJfcmVjbG9ja19tdXRleCIgXSBcCgl8fCBfZmFpbCAidW5leHBlY3Rl ZCBsb2NrIG5hbWU6ICRMT0NLX05BTUUiCkxPQ0tfVFlQRT0iJChqcSAtciAnLnR5cGUnICR7VE1Q X0RJUn0vbG9ja19zdGF0ZV9mb3VydGgpIgpbICIkTE9DS19UWVBFIiA9PSAiZXhjbHVzaXZlIiBd IFwKCXx8IF9mYWlsICJ1bmV4cGVjdGVkIGxvY2sgdHlwZTogJExPQ0tfVFlQRSIKCkxPQ0tfQ09V TlQ9IiQoanEgLXIgJy5sb2NrZXJzIHwgbGVuZ3RoJyAke1RNUF9ESVJ9L2xvY2tfc3RhdGVfZm91 cnRoKSIKWyAkTE9DS19DT1VOVCAtZXEgMSBdIHx8IF9mYWlsICJleHBlY3RlZCAxIGxvY2sgaW4g cmFkb3Mgc3RhdGUsIGdvdCAkTE9DS19DT1VOVCIKTE9DS0VSX0NPT0tJRT0iJChqcSAtciAnLmxv Y2tlcnNbMF0uY29va2llJyAke1RNUF9ESVJ9L2xvY2tfc3RhdGVfZm91cnRoKSIKWyAiJExPQ0tF Ul9DT09LSUUiID09ICJjdGRiX3JlY2xvY2tfbXV0ZXgiIF0gXAoJfHwgX2ZhaWwgInVuZXhwZWN0 ZWQgbG9ja2VyIGNvb2tpZTogJExPQ0tFUl9DT09LSUUiCkxPQ0tFUl9ERVNDPSIkKGpxIC1yICcu bG9ja2Vyc1swXS5kZXNjcmlwdGlvbicgJHtUTVBfRElSfS9sb2NrX3N0YXRlX2ZvdXJ0aCkiClsg IiRMT0NLRVJfREVTQyIgPT0gIkNUREIgcmVjb3ZlcnkgbG9jayIgXSBcCgl8fCBfZmFpbCAidW5l eHBlY3RlZCBsb2NrZXIgZGVzY3JpcHRpb246ICRMT0NLRVJfREVTQyIKCmtpbGwgJGxvY2tlcl9w aWQgfHwgZXhpdCAxCndhaXQgJGxvY2tlcl9waWQgJj4gL2Rldi9udWxsCgp0aGlyZF9vdXQ9JChj YXQgJHtUTVBfRElSfS90aGlyZCkKWyAiJHRoaXJkX291dCIgPT0gIjAiIF0gXAoJfHwgX2ZhaWwg ImV4cGVjdGVkIGxvY2sgYWNxdWlzaXRpb24gKDApLCBidXQgZ290ICR0aGlyZF9vdXQiCgpybSAk e1RNUF9ESVJ9LyoKcm1kaXIgJFRNUF9ESVIK --MP_/XJKzg.mnyo0P.jCCFY2crPN--