From mboxrd@z Thu Jan 1 00:00:00 1970 From: majianpeng Subject: Re: Re: [RESEND PATCH V4 2/2] ceph: Implement writev/pwritev for sync operation. Date: Thu, 12 Sep 2013 13:58:35 +0800 Message-ID: <2013091213582888583712@gmail.com> References: <2013091213542263913011@gmail.com>, <523157D8.1010303@intel.com> Reply-To: majianpeng Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f43.google.com ([209.85.220.43]:36672 "EHLO mail-pa0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752457Ab3ILF6v (ORCPT ); Thu, 12 Sep 2013 01:58:51 -0400 Received: by mail-pa0-f43.google.com with SMTP id hz10so642224pad.30 for ; Wed, 11 Sep 2013 22:58:50 -0700 (PDT) Sender: ceph-devel-owner@vger.kernel.org List-ID: To: =?us-ascii?B?WWFuLCBaaGVuZw==?= Cc: sage , ceph-devel PlJldmlld2VkLWJ5OiBZYW4sIFpoZW5nIDx6aGVuZy56LnlhbkBpbnRlbC5jb20+DQoNClRoYW5r cyB2ZXJ5IG11Y2ghDQpKaWFucGVuZyBNYQ0KPg0KPk9uIDA5LzEyLzIwMTMgMDE6NTQgUE0sIG1h amlhbnBlbmcgd3JvdGU6DQo+PiBGb3Igd3JpdGV2L3B3cml0ZXYgc3luYy1vcGVyYXRvaW4sIGNl cGggb25seSBkbyB0aGUgZmlyc3QgaW92Lg0KPj4gSXQgZG9uJ3QgdGhpbmsgb3RoZXIgaW92cy5O b3cgaW1wbGVtZW50IHRoaXMuDQo+PiBJIGRpdmlkZWQgdGhlIHdyaXRlLXN5bmMtb3BlcmF0aW9u IGludG8gdHdvIGZ1bmN0aW9ucy5PbmUgZm9yDQo+PiBkaXJlY3Qtd3JpdGUsb3RoZXIgZm9yIG5v bmUtZGlyZWN0LXN5bmMtd3JpdGUuVGhpcyBpcyBiZWNhdXNlIGZvcg0KPj4gbm9uZS1kaXJlY3Qt c3luYy13cml0ZSB3ZSBjYW4gbWVyZ2UgaW92cyB0byBvbmUuQnV0IGZvciBkaXJlY3Qtd3JpdGUs DQo+PiB3ZSBjYW4ndCBtZXJnZSBpb3ZzLg0KPj4gDQo+PiBWNDoNCj4+IAlyZWNvbnN0cnVjdCB0 aGUgY29kZSBieSBZYW4sIFpoZW5nDQo+PiBWMjoNCj4+ICAgLXVzaW5nIHN0cnVjdCBpb3ZfaXRl ciByZXBsYWNlIGNsb25lIGlvdnMgaW4gY2VwaF9zeW5jX3dyaXRlLg0KPj4gDQo+PiBTaWduZWQt b2ZmLWJ5OiBKaWFucGVuZyBNYSA8bWFqaWFucGVuZ0BnbWFpbC5jb20+DQo+PiBSZXZpZXdlZC1i eTogWWFuLCBaaGVuZyA8emhlbmcuei55YW5AaW50ZWwuY29tPg0KPj4gLS0tDQo+PiAgZnMvY2Vw aC9maWxlLmMgfCAyNzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tDQo+PiAgMSBmaWxlIGNoYW5nZWQsIDE5MyBpbnNlcnRpb25zKCspLCA4 MCBkZWxldGlvbnMoLSkNCj4+IA0KPj4gZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZmlsZS5jIGIvZnMv Y2VwaC9maWxlLmMNCj4+IGluZGV4IDNkZTg5ODIuLjVjZjAzNGUgMTAwNjQ0DQo+PiAtLS0gYS9m cy9jZXBoL2ZpbGUuYw0KPj4gKysrIGIvZnMvY2VwaC9maWxlLmMNCj4+IEBAIC00ODksODMgKzQ4 OSw3OSBAQCBzdGF0aWMgdm9pZCBjZXBoX3N5bmNfd3JpdGVfdW5zYWZlKHN0cnVjdCBjZXBoX29z ZF9yZXF1ZXN0ICpyZXEsIGJvb2wgdW5zYWZlKQ0KPj4gIAl9DQo+PiAgfQ0KPj4gIA0KPj4gKw0K Pj4gIC8qDQo+PiAtICogU3luY2hyb25vdXMgd3JpdGUsIHN0cmFpZ2h0IGZyb20gX191c2VyIHBv aW50ZXIgb3IgdXNlciBwYWdlcyAoaWYNCj4+IC0gKiBPX0RJUkVDVCkuDQo+PiArICogU3luY2hy b25vdXMgd3JpdGUsIHN0cmFpZ2h0IGZyb20gX191c2VyIHBvaW50ZXIgb3IgdXNlciBwYWdlcy4N Cj4+ICAgKg0KPj4gICAqIElmIHdyaXRlIHNwYW5zIG9iamVjdCBib3VuZGFyeSwganVzdCBkbyBt dWx0aXBsZSB3cml0ZXMuICAoRm9yIGENCj4+ICAgKiBjb3JyZWN0IGF0b21pYyB3cml0ZSwgd2Ug c2hvdWxkIGUuZy4gdGFrZSB3cml0ZSBsb2NrcyBvbiBhbGwNCj4+ICAgKiBvYmplY3RzLCByb2xs YmFjayBvbiBmYWlsdXJlLCBldGMuKQ0KPj4gICAqLw0KPj4gLXN0YXRpYyBzc2l6ZV90IGNlcGhf c3luY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsDQo+ PiAtCQkJICAgICAgIHNpemVfdCBsZWZ0LCBsb2ZmX3QgcG9zLCBsb2ZmX3QgKnBwb3MpDQo+PiAr c3RhdGljIHNzaXplX3QNCj4+ICtjZXBoX3N5bmNfZGlyZWN0X3dyaXRlKHN0cnVjdCBraW9jYiAq aW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsDQo+PiArCQkgICAgICAgdW5zaWduZWQgbG9u ZyBucl9zZWdzLCBzaXplX3QgY291bnQpDQo+PiAgew0KPj4gKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9 IGlvY2ItPmtpX2ZpbHA7DQo+PiAgCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZp bGUpOw0KPj4gIAlzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSA9IGNlcGhfaW5vZGUoaW5vZGUp Ow0KPj4gIAlzdHJ1Y3QgY2VwaF9mc19jbGllbnQgKmZzYyA9IGNlcGhfaW5vZGVfdG9fY2xpZW50 KGlub2RlKTsNCj4+ICAJc3RydWN0IGNlcGhfc25hcF9jb250ZXh0ICpzbmFwYzsNCj4+ICAJc3Ry dWN0IGNlcGhfdmlubyB2aW5vOw0KPj4gIAlzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqcmVxOw0K Pj4gLQlpbnQgbnVtX29wcyA9IDE7DQo+PiAgCXN0cnVjdCBwYWdlICoqcGFnZXM7DQo+PiAgCWlu dCBudW1fcGFnZXM7DQo+PiAtCXU2NCBsZW47DQo+PiAgCWludCB3cml0dGVuID0gMDsNCj4+ICAJ aW50IGZsYWdzOw0KPj4gIAlpbnQgY2hlY2tfY2FwcyA9IDA7DQo+PiAtCWludCBwYWdlX2FsaWdu LCBpb19hbGlnbjsNCj4+IC0JdW5zaWduZWQgbG9uZyBidWZfYWxpZ247DQo+PiArCWludCBwYWdl X2FsaWduOw0KPj4gIAlpbnQgcmV0Ow0KPj4gIAlzdHJ1Y3QgdGltZXNwZWMgbXRpbWUgPSBDVVJS RU5UX1RJTUU7DQo+PiAtCWJvb2wgb3duX3BhZ2VzID0gZmFsc2U7DQo+PiArCWxvZmZfdCBwb3Mg PSBpb2NiLT5raV9wb3M7DQo+PiArCXN0cnVjdCBpb3ZfaXRlciBpOw0KPj4gIA0KPj4gIAlpZiAo Y2VwaF9zbmFwKGZpbGVfaW5vZGUoZmlsZSkpICE9IENFUEhfTk9TTkFQKQ0KPj4gIAkJcmV0dXJu IC1FUk9GUzsNCj4+ICANCj4+IC0JZG91dCgic3luY193cml0ZSBvbiBmaWxlICVwICVsbGR+JXUg JXNcbiIsIGZpbGUsIHBvcywNCj4+IC0JICAgICAodW5zaWduZWQpbGVmdCwgKGZpbGUtPmZfZmxh Z3MgJiBPX0RJUkVDVCkgPyAiT19ESVJFQ1QiIDogIiIpOw0KPj4gKwlkb3V0KCJzeW5jX2RpcmVj dF93cml0ZSBvbiBmaWxlICVwICVsbGR+JXVcbiIsIGZpbGUsIHBvcywNCj4+ICsJICAgICAodW5z aWduZWQpY291bnQpOw0KPj4gIA0KPj4gLQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3Jh bmdlKGlub2RlLT5pX21hcHBpbmcsIHBvcywgcG9zICsgbGVmdCk7DQo+PiArCXJldCA9IGZpbGVt YXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgcG9zLCBwb3MgKyBjb3Vu dCk7DQo+PiAgCWlmIChyZXQgPCAwKQ0KPj4gIAkJcmV0dXJuIHJldDsNCj4+ICANCj4+ICAJcmV0 ID0gaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywNCj4+ICAJ CQkJCSAgICBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVCwNCj4+IC0JCQkJCSAgICAocG9zICsgbGVm dCkgPj4gUEFHRV9DQUNIRV9TSElGVCk7DQo+PiArCQkJCQkgICAgKHBvcyArIGNvdW50KSA+PiBQ QUdFX0NBQ0hFX1NISUZUKTsNCj4+ICAJaWYgKHJldCA8IDApDQo+PiAgCQlkb3V0KCJpbnZhbGlk YXRlX2lub2RlX3BhZ2VzMl9yYW5nZSByZXR1cm5lZCAlZFxuIiwgcmV0KTsNCj4+ICANCj4+ICAJ ZmxhZ3MgPSBDRVBIX09TRF9GTEFHX09SREVSU05BUCB8DQo+PiAgCQlDRVBIX09TRF9GTEFHX09O RElTSyB8DQo+PiAgCQlDRVBIX09TRF9GTEFHX1dSSVRFOw0KPj4gLQlpZiAoKGZpbGUtPmZfZmxh Z3MgJiAoT19TWU5DfE9fRElSRUNUKSkgPT0gMCkNCj4+IC0JCWZsYWdzIHw9IENFUEhfT1NEX0ZM QUdfQUNLOw0KPj4gLQllbHNlDQo+PiAtCQludW1fb3BzKys7CS8qIEFsc28gaW5jbHVkZSBhICdz dGFydHN5bmMnIGNvbW1hbmQuICovDQo+PiAgDQo+PiAtCS8qDQo+PiAtCSAqIHdlIG1heSBuZWVk IHRvIGRvIG11bHRpcGxlIHdyaXRlcyBoZXJlIGlmIHdlIHNwYW4gYW4gb2JqZWN0DQo+PiAtCSAq IGJvdW5kYXJ5LiAgdGhpcyBpc24ndCBhdG9taWMsIHVuZm9ydHVuYXRlbHkuICA6KA0KPj4gLQkg Ki8NCj4+IC1tb3JlOg0KPj4gLQlpb19hbGlnbiA9IHBvcyAmIH5QQUdFX01BU0s7DQo+PiAtCWJ1 Zl9hbGlnbiA9ICh1bnNpZ25lZCBsb25nKWRhdGEgJiB+UEFHRV9NQVNLOw0KPj4gLQlsZW4gPSBs ZWZ0Ow0KPj4gLQ0KPj4gLQlzbmFwYyA9IGNpLT5pX3NuYXBfcmVhbG0tPmNhY2hlZF9jb250ZXh0 Ow0KPj4gLQl2aW5vID0gY2VwaF92aW5vKGlub2RlKTsNCj4+IC0JcmVxID0gY2VwaF9vc2RjX25l d19yZXF1ZXN0KCZmc2MtPmNsaWVudC0+b3NkYywgJmNpLT5pX2xheW91dCwNCj4+IC0JCQkJICAg IHZpbm8sIHBvcywgJmxlbiwgbnVtX29wcywNCj4+IC0JCQkJICAgIENFUEhfT1NEX09QX1dSSVRF LCBmbGFncywgc25hcGMsDQo+PiAtCQkJCSAgICBjaS0+aV90cnVuY2F0ZV9zZXEsIGNpLT5pX3Ry dW5jYXRlX3NpemUsDQo+PiAtCQkJCSAgICBmYWxzZSk7DQo+PiAtCWlmIChJU19FUlIocmVxKSkN Cj4+IC0JCXJldHVybiBQVFJfRVJSKHJlcSk7DQo+PiArCWlvdl9pdGVyX2luaXQoJmksIGlvdiwg bnJfc2VncywgY291bnQsIDApOw0KPj4gKw0KPj4gKwl3aGlsZSAoaW92X2l0ZXJfY291bnQoJmkp ID4gMCkgew0KPj4gKwkJdm9pZCBfX3VzZXIgKmRhdGEgPSBpLmlvdi0+aW92X2Jhc2UgKyBpLmlv dl9vZmZzZXQ7DQo+PiArCQl1NjQgbGVuID0gaS5pb3YtPmlvdl9sZW4gLSBpLmlvdl9vZmZzZXQ7 DQo+PiArDQo+PiArCQlwYWdlX2FsaWduID0gKHVuc2lnbmVkIGxvbmcpZGF0YSAmIH5QQUdFX01B U0s7DQo+PiArDQo+PiArCQlzbmFwYyA9IGNpLT5pX3NuYXBfcmVhbG0tPmNhY2hlZF9jb250ZXh0 Ow0KPj4gKwkJdmlubyA9IGNlcGhfdmlubyhpbm9kZSk7DQo+PiArCQlyZXEgPSBjZXBoX29zZGNf bmV3X3JlcXVlc3QoJmZzYy0+Y2xpZW50LT5vc2RjLCAmY2ktPmlfbGF5b3V0LA0KPj4gKwkJCQkJ ICAgIHZpbm8sIHBvcywgJmxlbiwNCj4+ICsJCQkJCSAgICAyLC8qaW5jbHVkZSBhICdzdGFydHN5 bmMnIGNvbW1hbmQqLw0KPj4gKwkJCQkJICAgIENFUEhfT1NEX09QX1dSSVRFLCBmbGFncywgc25h cGMsDQo+PiArCQkJCQkgICAgY2ktPmlfdHJ1bmNhdGVfc2VxLA0KPj4gKwkJCQkJICAgIGNpLT5p X3RydW5jYXRlX3NpemUsDQo+PiArCQkJCQkgICAgZmFsc2UpOw0KPj4gKwkJaWYgKElTX0VSUihy ZXEpKSB7DQo+PiArCQkJcmV0ID0gUFRSX0VSUihyZXEpOw0KPj4gKwkJCWdvdG8gb3V0Ow0KPj4g KwkJfQ0KPj4gIA0KPj4gLQkvKiB3cml0ZSBmcm9tIGJlZ2lubmluZyBvZiBmaXJzdCBwYWdlLCBy ZWdhcmRsZXNzIG9mIGlvIGFsaWdubWVudCAqLw0KPj4gLQlwYWdlX2FsaWduID0gZmlsZS0+Zl9m bGFncyAmIE9fRElSRUNUID8gYnVmX2FsaWduIDogaW9fYWxpZ247DQo+PiAtCW51bV9wYWdlcyA9 IGNhbGNfcGFnZXNfZm9yKHBhZ2VfYWxpZ24sIGxlbik7DQo+PiAtCWlmIChmaWxlLT5mX2ZsYWdz ICYgT19ESVJFQ1QpIHsNCj4+ICsJCW51bV9wYWdlcyA9IGNhbGNfcGFnZXNfZm9yKHBhZ2VfYWxp Z24sIGxlbik7DQo+PiAgCQlwYWdlcyA9IGNlcGhfZ2V0X2RpcmVjdF9wYWdlX3ZlY3RvcihkYXRh LCBudW1fcGFnZXMsIGZhbHNlKTsNCj4+ICAJCWlmIChJU19FUlIocGFnZXMpKSB7DQo+PiAgCQkJ cmV0ID0gUFRSX0VSUihwYWdlcyk7DQo+PiBAQCAtNTc3LDYwICs1NzMsMTc1IEBAIG1vcmU6DQo+ PiAgCQkgKiBtYXkgYmxvY2suDQo+PiAgCQkgKi8NCj4+ICAJCXRydW5jYXRlX2lub2RlX3BhZ2Vz X3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHBvcywNCj4+IC0JCQkJCSAgIChwb3MrbGVuKSB8IChQ QUdFX0NBQ0hFX1NJWkUtMSkpOw0KPj4gLQl9IGVsc2Ugew0KPj4gKwkJCQkgICAocG9zK2xlbikg fCAoUEFHRV9DQUNIRV9TSVpFLTEpKTsNCj4+ICsJCW9zZF9yZXFfb3BfZXh0ZW50X29zZF9kYXRh X3BhZ2VzKHJlcSwgMCwgcGFnZXMsIGxlbiwgcGFnZV9hbGlnbiwNCj4+ICsJCQkJCQlmYWxzZSwg ZmFsc2UpOw0KPj4gKw0KPj4gKwkJLyogQlVHX09OKHZpbm8uc25hcCAhPSBDRVBIX05PU05BUCk7 ICovDQo+PiArCQljZXBoX29zZGNfYnVpbGRfcmVxdWVzdChyZXEsIHBvcywgc25hcGMsIHZpbm8u c25hcCwgJm10aW1lKTsNCj4+ICsNCj4+ICsJCXJldCA9IGNlcGhfb3NkY19zdGFydF9yZXF1ZXN0 KCZmc2MtPmNsaWVudC0+b3NkYywgcmVxLCBmYWxzZSk7DQo+PiArCQlpZiAoIXJldCkNCj4+ICsJ CQlyZXQgPSBjZXBoX29zZGNfd2FpdF9yZXF1ZXN0KCZmc2MtPmNsaWVudC0+b3NkYywgcmVxKTsN Cj4+ICsNCj4+ICsJCWNlcGhfcHV0X3BhZ2VfdmVjdG9yKHBhZ2VzLCBudW1fcGFnZXMsIGZhbHNl KTsNCj4+ICsNCj4+ICtvdXQ6DQo+PiArCQljZXBoX29zZGNfcHV0X3JlcXVlc3QocmVxKTsNCj4+ ICsJCWlmIChyZXQgPT0gMCkgew0KPj4gKwkJCXBvcyArPSBsZW47DQo+PiArCQkJd3JpdHRlbiAr PSBsZW47DQo+PiArCQkJaW92X2l0ZXJfYWR2YW5jZSgmaSwgKHNpemVfdClsZW4pOw0KPj4gKw0K Pj4gKwkJCWlmIChwb3MgPiBpX3NpemVfcmVhZChpbm9kZSkpIHsNCj4+ICsJCQkJY2hlY2tfY2Fw cyA9IGNlcGhfaW5vZGVfc2V0X3NpemUoaW5vZGUsIHBvcyk7DQo+PiArCQkJCWlmIChjaGVja19j YXBzKQ0KPj4gKwkJCQkJY2VwaF9jaGVja19jYXBzKGNlcGhfaW5vZGUoaW5vZGUpLA0KPj4gKwkJ CQkJCQlDSEVDS19DQVBTX0FVVEhPTkxZLA0KPj4gKwkJCQkJCQlOVUxMKTsNCj4+ICsJCQl9DQo+ PiArCQl9IGVsc2UNCj4+ICsJCQlicmVhazsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAocmV0ICE9 IC1FT0xEU05BUEMgJiYgd3JpdHRlbiA+IDApIHsNCj4+ICsJCWlvY2ItPmtpX3BvcyA9IHBvczsN Cj4+ICsJCXJldCA9IHdyaXR0ZW47DQo+PiArCX0NCj4+ICsJcmV0dXJuIHJldDsNCj4+ICt9DQo+ PiArDQo+PiArDQo+PiArLyoNCj4+ICsgKiBTeW5jaHJvbm91cyB3cml0ZSwgc3RyYWlnaHQgZnJv bSBfX3VzZXIgcG9pbnRlciBvciB1c2VyIHBhZ2VzLg0KPj4gKyAqDQo+PiArICogSWYgd3JpdGUg c3BhbnMgb2JqZWN0IGJvdW5kYXJ5LCBqdXN0IGRvIG11bHRpcGxlIHdyaXRlcy4gIChGb3IgYQ0K Pj4gKyAqIGNvcnJlY3QgYXRvbWljIHdyaXRlLCB3ZSBzaG91bGQgZS5nLiB0YWtlIHdyaXRlIGxv Y2tzIG9uIGFsbA0KPj4gKyAqIG9iamVjdHMsIHJvbGxiYWNrIG9uIGZhaWx1cmUsIGV0Yy4pDQo+ PiArICovDQo+PiArc3RhdGljIHNzaXplX3QgY2VwaF9zeW5jX3dyaXRlKHN0cnVjdCBraW9jYiAq aW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsDQo+PiArCQkJICAgICAgIHVuc2lnbmVkIGxv bmcgbnJfc2Vncywgc2l6ZV90IGNvdW50KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGZpbGUgKmZpbGUg PSBpb2NiLT5raV9maWxwOw0KPj4gKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShm aWxlKTsNCj4+ICsJc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2kgPSBjZXBoX2lub2RlKGlub2Rl KTsNCj4+ICsJc3RydWN0IGNlcGhfZnNfY2xpZW50ICpmc2MgPSBjZXBoX2lub2RlX3RvX2NsaWVu dChpbm9kZSk7DQo+PiArCXN0cnVjdCBjZXBoX3NuYXBfY29udGV4dCAqc25hcGM7DQo+PiArCXN0 cnVjdCBjZXBoX3Zpbm8gdmlubzsNCj4+ICsJc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKnJlcTsN Cj4+ICsJc3RydWN0IHBhZ2UgKipwYWdlczsNCj4+ICsJdTY0IGxlbjsNCj4+ICsJaW50IG51bV9w YWdlczsNCj4+ICsJaW50IHdyaXR0ZW4gPSAwOw0KPj4gKwlpbnQgZmxhZ3M7DQo+PiArCWludCBj aGVja19jYXBzID0gMDsNCj4+ICsJaW50IHJldDsNCj4+ICsJc3RydWN0IHRpbWVzcGVjIG10aW1l ID0gQ1VSUkVOVF9USU1FOw0KPj4gKwlsb2ZmX3QgcG9zID0gaW9jYi0+a2lfcG9zOw0KPj4gKwlz dHJ1Y3QgaW92X2l0ZXIgaTsNCj4+ICsNCj4+ICsJaWYgKGNlcGhfc25hcChmaWxlX2lub2RlKGZp bGUpKSAhPSBDRVBIX05PU05BUCkNCj4+ICsJCXJldHVybiAtRVJPRlM7DQo+PiArDQo+PiArCWRv dXQoInN5bmNfd3JpdGUgb24gZmlsZSAlcCAlbGxkfiV1XG4iLCBmaWxlLCBwb3MsICh1bnNpZ25l ZCljb3VudCk7DQo+PiArDQo+PiArCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2Uo aW5vZGUtPmlfbWFwcGluZywgcG9zLCBwb3MgKyBjb3VudCk7DQo+PiArCWlmIChyZXQgPCAwKQ0K Pj4gKwkJcmV0dXJuIHJldDsNCj4+ICsNCj4+ICsJcmV0ID0gaW52YWxpZGF0ZV9pbm9kZV9wYWdl czJfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywNCj4+ICsJCQkJCSAgICBwb3MgPj4gUEFHRV9DQUNI RV9TSElGVCwNCj4+ICsJCQkJCSAgICAocG9zICsgY291bnQpID4+IFBBR0VfQ0FDSEVfU0hJRlQp Ow0KPj4gKwlpZiAocmV0IDwgMCkNCj4+ICsJCWRvdXQoImludmFsaWRhdGVfaW5vZGVfcGFnZXMy X3JhbmdlIHJldHVybmVkICVkXG4iLCByZXQpOw0KPj4gKw0KPj4gKwlmbGFncyA9IENFUEhfT1NE X0ZMQUdfT1JERVJTTkFQIHwNCj4+ICsJCUNFUEhfT1NEX0ZMQUdfT05ESVNLIHwNCj4+ICsJCUNF UEhfT1NEX0ZMQUdfV1JJVEUgfA0KPj4gKwkJQ0VQSF9PU0RfRkxBR19BQ0s7DQo+PiArDQo+PiAr CWlvdl9pdGVyX2luaXQoJmksIGlvdiwgbnJfc2VncywgY291bnQsIDApOw0KPj4gKw0KPj4gKwl3 aGlsZSAoKGxlbiA9IGlvdl9pdGVyX2NvdW50KCZpKSkgPiAwKSB7DQo+PiArCQlzaXplX3QgbGVm dDsNCj4+ICsJCWludCBuOw0KPj4gKw0KPj4gKwkJc25hcGMgPSBjaS0+aV9zbmFwX3JlYWxtLT5j YWNoZWRfY29udGV4dDsNCj4+ICsJCXZpbm8gPSBjZXBoX3Zpbm8oaW5vZGUpOw0KPj4gKwkJcmVx ID0gY2VwaF9vc2RjX25ld19yZXF1ZXN0KCZmc2MtPmNsaWVudC0+b3NkYywgJmNpLT5pX2xheW91 dCwNCj4+ICsJCQkJCSAgICB2aW5vLCBwb3MsICZsZW4sIDEsDQo+PiArCQkJCQkgICAgQ0VQSF9P U0RfT1BfV1JJVEUsIGZsYWdzLCBzbmFwYywNCj4+ICsJCQkJCSAgICBjaS0+aV90cnVuY2F0ZV9z ZXEsDQo+PiArCQkJCQkgICAgY2ktPmlfdHJ1bmNhdGVfc2l6ZSwNCj4+ICsJCQkJCSAgICBmYWxz ZSk7DQo+PiArCQlpZiAoSVNfRVJSKHJlcSkpIHsNCj4+ICsJCQlyZXQgPSBQVFJfRVJSKHJlcSk7 DQo+PiArCQkJZ290byBvdXQ7DQo+PiArCQl9DQo+PiArDQo+PiArCQkvKg0KPj4gKwkJICogd3Jp dGUgZnJvbSBiZWdpbm5pbmcgb2YgZmlyc3QgcGFnZSwNCj4+ICsJCSAqIHJlZ2FyZGxlc3Mgb2Yg aW8gYWxpZ25tZW50DQo+PiArCQkgKi8NCj4+ICsJCW51bV9wYWdlcyA9IChsZW4gKyBQQUdFX0NB Q0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOw0KPj4gKw0KPj4gIAkJcGFnZXMgPSBj ZXBoX2FsbG9jX3BhZ2VfdmVjdG9yKG51bV9wYWdlcywgR0ZQX05PRlMpOw0KPj4gIAkJaWYgKElT X0VSUihwYWdlcykpIHsNCj4+ICAJCQlyZXQgPSBQVFJfRVJSKHBhZ2VzKTsNCj4+ICAJCQlnb3Rv IG91dDsNCj4+ICAJCX0NCj4+IC0JCXJldCA9IGNlcGhfY29weV91c2VyX3RvX3BhZ2VfdmVjdG9y KHBhZ2VzLCBkYXRhLCBwb3MsIGxlbik7DQo+PiArDQo+PiArCQlsZWZ0ID0gbGVuOw0KPj4gKwkJ Zm9yIChuID0gMDsgbiA8IG51bV9wYWdlczsgbisrKSB7DQo+PiArCQkJc2l6ZV90IHBsZW4gPSBt aW4obGVmdCwgUEFHRV9TSVpFKTsNCj4+ICsJCQlyZXQgPSBpb3ZfaXRlcl9jb3B5X2Zyb21fdXNl cihwYWdlc1tuXSwgJmksIDAsIHBsZW4pOw0KPj4gKwkJCWlmIChyZXQgIT0gcGxlbikgew0KPj4g KwkJCQlyZXQgPSAtRUZBVUxUOw0KPj4gKwkJCQlicmVhazsNCj4+ICsJCQl9DQo+PiArCQkJbGVm dCAtPSByZXQ7DQo+PiArCQkJaW92X2l0ZXJfYWR2YW5jZSgmaSwgcmV0KTsNCj4+ICsJCX0NCj4+ ICsNCj4+ICAJCWlmIChyZXQgPCAwKSB7DQo+PiAgCQkJY2VwaF9yZWxlYXNlX3BhZ2VfdmVjdG9y KHBhZ2VzLCBudW1fcGFnZXMpOw0KPj4gIAkJCWdvdG8gb3V0Ow0KPj4gIAkJfQ0KPj4gIA0KPj4g LQkJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSA9PSAwKSB7DQo+PiAtCQkJLyogZ2V0IGEg c2Vjb25kIGNvbW1pdCBjYWxsYmFjayAqLw0KPj4gLQkJCXJlcS0+cl91bnNhZmVfY2FsbGJhY2sg PSBjZXBoX3N5bmNfd3JpdGVfdW5zYWZlOw0KPj4gLQkJCXJlcS0+cl9pbm9kZSA9IGlub2RlOw0K Pj4gLQkJCW93bl9wYWdlcyA9IHRydWU7DQo+PiAtCQl9DQo+PiAtCX0NCj4+IC0Jb3NkX3JlcV9v cF9leHRlbnRfb3NkX2RhdGFfcGFnZXMocmVxLCAwLCBwYWdlcywgbGVuLCBwYWdlX2FsaWduLA0K Pj4gLQkJCQkJZmFsc2UsIG93bl9wYWdlcyk7DQo+PiArCQkvKiBnZXQgYSBzZWNvbmQgY29tbWl0 IGNhbGxiYWNrICovDQo+PiArCQlyZXEtPnJfdW5zYWZlX2NhbGxiYWNrID0gY2VwaF9zeW5jX3dy aXRlX3Vuc2FmZTsNCj4+ICsJCXJlcS0+cl9pbm9kZSA9IGlub2RlOw0KPj4gIA0KPj4gLQkvKiBC VUdfT04odmluby5zbmFwICE9IENFUEhfTk9TTkFQKTsgKi8NCj4+IC0JY2VwaF9vc2RjX2J1aWxk X3JlcXVlc3QocmVxLCBwb3MsIHNuYXBjLCB2aW5vLnNuYXAsICZtdGltZSk7DQo+PiArCQlvc2Rf cmVxX29wX2V4dGVudF9vc2RfZGF0YV9wYWdlcyhyZXEsIDAsIHBhZ2VzLCBsZW4sIDAsDQo+PiAr CQkJCQkJZmFsc2UsIHRydWUpOw0KPj4gIA0KPj4gLQlyZXQgPSBjZXBoX29zZGNfc3RhcnRfcmVx dWVzdCgmZnNjLT5jbGllbnQtPm9zZGMsIHJlcSwgZmFsc2UpOw0KPj4gLQlpZiAoIXJldCkNCj4+ IC0JCXJldCA9IGNlcGhfb3NkY193YWl0X3JlcXVlc3QoJmZzYy0+Y2xpZW50LT5vc2RjLCByZXEp Ow0KPj4gKwkJLyogQlVHX09OKHZpbm8uc25hcCAhPSBDRVBIX05PU05BUCk7ICovDQo+PiArCQlj ZXBoX29zZGNfYnVpbGRfcmVxdWVzdChyZXEsIHBvcywgc25hcGMsIHZpbm8uc25hcCwgJm10aW1l KTsNCj4+ICANCj4+IC0JaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0RJUkVDVCkNCj4+IC0JCWNlcGhf cHV0X3BhZ2VfdmVjdG9yKHBhZ2VzLCBudW1fcGFnZXMsIGZhbHNlKTsNCj4+IC0JZWxzZSBpZiAo ZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykNCj4+IC0JCWNlcGhfcmVsZWFzZV9wYWdlX3ZlY3Rvcihw YWdlcywgbnVtX3BhZ2VzKTsNCj4+ICsJCXJldCA9IGNlcGhfb3NkY19zdGFydF9yZXF1ZXN0KCZm c2MtPmNsaWVudC0+b3NkYywgcmVxLCBmYWxzZSk7DQo+PiArCQlpZiAoIXJldCkNCj4+ICsJCQly ZXQgPSBjZXBoX29zZGNfd2FpdF9yZXF1ZXN0KCZmc2MtPmNsaWVudC0+b3NkYywgcmVxKTsNCj4+ ICANCj4+ICBvdXQ6DQo+PiAtCWNlcGhfb3NkY19wdXRfcmVxdWVzdChyZXEpOw0KPj4gLQlpZiAo cmV0ID09IDApIHsNCj4+IC0JCXBvcyArPSBsZW47DQo+PiAtCQl3cml0dGVuICs9IGxlbjsNCj4+ IC0JCWxlZnQgLT0gbGVuOw0KPj4gLQkJZGF0YSArPSBsZW47DQo+PiAtCQlpZiAobGVmdCkNCj4+ IC0JCQlnb3RvIG1vcmU7DQo+PiArCQljZXBoX29zZGNfcHV0X3JlcXVlc3QocmVxKTsNCj4+ICsJ CWlmIChyZXQgPT0gMCkgew0KPj4gKwkJCXBvcyArPSBsZW47DQo+PiArCQkJd3JpdHRlbiArPSBs ZW47DQo+PiArDQo+PiArCQkJaWYgKHBvcyA+IGlfc2l6ZV9yZWFkKGlub2RlKSkgew0KPj4gKwkJ CQljaGVja19jYXBzID0gY2VwaF9pbm9kZV9zZXRfc2l6ZShpbm9kZSwgcG9zKTsNCj4+ICsJCQkJ aWYgKGNoZWNrX2NhcHMpDQo+PiArCQkJCQljZXBoX2NoZWNrX2NhcHMoY2VwaF9pbm9kZShpbm9k ZSksDQo+PiArCQkJCQkJCUNIRUNLX0NBUFNfQVVUSE9OTFksDQo+PiArCQkJCQkJCU5VTEwpOw0K Pj4gKwkJCX0NCj4+ICsJCX0gZWxzZQ0KPj4gKwkJCWJyZWFrOw0KPj4gKwl9DQo+PiAgDQo+PiAr CWlmIChyZXQgIT0gLUVPTERTTkFQQyAmJiB3cml0dGVuID4gMCkgew0KPj4gIAkJcmV0ID0gd3Jp dHRlbjsNCj4+IC0JCSpwcG9zID0gcG9zOw0KPj4gLQkJaWYgKHBvcyA+IGlfc2l6ZV9yZWFkKGlu b2RlKSkNCj4+IC0JCQljaGVja19jYXBzID0gY2VwaF9pbm9kZV9zZXRfc2l6ZShpbm9kZSwgcG9z KTsNCj4+IC0JCWlmIChjaGVja19jYXBzKQ0KPj4gLQkJCWNlcGhfY2hlY2tfY2FwcyhjZXBoX2lu b2RlKGlub2RlKSwgQ0hFQ0tfQ0FQU19BVVRIT05MWSwNCj4+IC0JCQkJCU5VTEwpOw0KPj4gLQl9 IGVsc2UgaWYgKHJldCAhPSAtRU9MRFNOQVBDICYmIHdyaXR0ZW4gPiAwKSB7DQo+PiAtCQlyZXQg PSB3cml0dGVuOw0KPj4gKwkJaW9jYi0+a2lfcG9zID0gcG9zOw0KPj4gIAl9DQo+PiAgCXJldHVy biByZXQ7DQo+PiAgfQ0KPj4gQEAgLTc3MiwxMSArODgzLDEzIEBAIHJldHJ5X3NuYXA6DQo+PiAg CSAgICAgaW5vZGUsIGNlcGhfdmlub3AoaW5vZGUpLCBwb3MsIGNvdW50LCBjZXBoX2NhcF9zdHJp bmcoZ290KSk7DQo+PiAgDQo+PiAgCWlmICgoZ290ICYgKENFUEhfQ0FQX0ZJTEVfQlVGRkVSfENF UEhfQ0FQX0ZJTEVfTEFaWUlPKSkgPT0gMCB8fA0KPj4gLQkgICAgKGlvY2ItPmtpX2ZpbHAtPmZf ZmxhZ3MgJiBPX0RJUkVDVCkgfHwNCj4+IC0JICAgIChmaS0+ZmxhZ3MgJiBDRVBIX0ZfU1lOQykp IHsNCj4+ICsJICAgIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpIHx8IChmaS0+ZmxhZ3MgJiBD RVBIX0ZfU1lOQykpIHsNCj4+ICAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOw0KPj4g LQkJd3JpdHRlbiA9IGNlcGhfc3luY193cml0ZShmaWxlLCBpb3YtPmlvdl9iYXNlLCBjb3VudCwN Cj4+IC0JCQkJCSAgcG9zLCAmaW9jYi0+a2lfcG9zKTsNCj4+ICsJCWlmIChmaWxlLT5mX2ZsYWdz ICYgT19ESVJFQ1QpDQo+PiArCQkJd3JpdHRlbiA9IGNlcGhfc3luY19kaXJlY3Rfd3JpdGUoaW9j YiwgaW92LA0KPj4gKwkJCQkJCQkgbnJfc2VncywgY291bnQpOw0KPj4gKwkJZWxzZQ0KPj4gKwkJ CXdyaXR0ZW4gPSBjZXBoX3N5bmNfd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBjb3VudCk7DQo+ PiAgCQlpZiAod3JpdHRlbiA9PSAtRU9MRFNOQVBDKSB7DQo+PiAgCQkJZG91dCgiYWlvX3dyaXRl ICVwICVsbHguJWxseCAlbGx1fiV1Ig0KPj4gIAkJCQkiZ290IEVPTERTTkFQQywgcmV0cnlpbmdc biIsDQo+PiANCj4=