From mboxrd@z Thu Jan 1 00:00:00 1970 From: kedacomkernel Subject: [PATCH V2 2/2] ceph: Implement writev/pwritev for sync operation. Date: Fri, 6 Sep 2013 16:48:28 +0800 Message-ID: <201309061648267673903@gmail.com> Reply-To: kedacomkernel Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: base64 Cc: ceph-devel , linux-fsdevel To: sage , =?us-ascii?B?WWFuLCBaaGVuZw==?= Return-path: Sender: ceph-devel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org Rm9yIHdyaXRldi9wd3JpdGV2IHN5bmMtb3BlcmF0b2luLCBjZXBoIG9ubHkgZG8gdGhlIGZpcnN0 IGlvdi4NCkl0IGRvbid0IHRoaW5rIG90aGVyIGlvdnMuTm93IGltcGxlbWVudCB0aGlzLg0KSSBk aXZpZGVkIHRoZSB3cml0ZS1zeW5jLW9wZXJhdGlvbiBpbnRvIHR3byBmdW5jdGlvbnMuT25lIGZv cg0KZGlyZWN0LXdyaXRlLG90aGVyIGZvciBub25lLWRpcmVjdC1zeW5jLXdyaXRlLlRoaXMgaXMg YmVjYXVzZSBmb3INCm5vbmUtZGlyZWN0LXN5bmMtd3JpdGUgd2UgY2FuIG1lcmdlIGlvdnMgdG8g b25lLkJ1dCBmb3IgZGlyZWN0LXdyaXRlLA0Kd2UgY2FuJ3QgbWVyZ2UgaW92cy4NCg0KVjI6DQog IC11c2luZyBzdHJ1Y3QgaW92X2l0ZXIgcmVwbGFjZSBjbG9uZSBpb3ZzIGluIGNlcGhfc3luY193 cml0ZS4NCg0KU2lnbmVkLW9mZi1ieTogSmlhbnBlbmcgTWEgPG1hamlhbnBlbmdAZ21haWwuY29t Pg0KLS0tDQogZnMvY2VwaC9maWxlLmMgfCAzMTQgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tDQogMSBmaWxlIGNoYW5nZWQsIDIzNCBpbnNl cnRpb25zKCspLCA4MCBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZmlsZS5j IGIvZnMvY2VwaC9maWxlLmMNCmluZGV4IDFjMjhjNTIuLjhkY2RlNjQgMTAwNjQ0DQotLS0gYS9m cy9jZXBoL2ZpbGUuYw0KKysrIGIvZnMvY2VwaC9maWxlLmMNCkBAIC01NDcsMTcgKzU0NywxOSBA QCBzdGF0aWMgdm9pZCBjZXBoX3N5bmNfd3JpdGVfdW5zYWZlKHN0cnVjdCBjZXBoX29zZF9yZXF1 ZXN0ICpyZXEsIGJvb2wgdW5zYWZlKQ0KIAl9DQogfQ0KIA0KKw0KIC8qDQotICogU3luY2hyb25v dXMgd3JpdGUsIHN0cmFpZ2h0IGZyb20gX191c2VyIHBvaW50ZXIgb3IgdXNlciBwYWdlcyAoaWYN Ci0gKiBPX0RJUkVDVCkuDQorICogU3luY2hyb25vdXMgd3JpdGUsIHN0cmFpZ2h0IGZyb20gX191 c2VyIHBvaW50ZXIgb3IgdXNlciBwYWdlcy4NCiAgKg0KICAqIElmIHdyaXRlIHNwYW5zIG9iamVj dCBib3VuZGFyeSwganVzdCBkbyBtdWx0aXBsZSB3cml0ZXMuICAoRm9yIGENCiAgKiBjb3JyZWN0 IGF0b21pYyB3cml0ZSwgd2Ugc2hvdWxkIGUuZy4gdGFrZSB3cml0ZSBsb2NrcyBvbiBhbGwNCiAg KiBvYmplY3RzLCByb2xsYmFjayBvbiBmYWlsdXJlLCBldGMuKQ0KICAqLw0KLXN0YXRpYyBzc2l6 ZV90IGNlcGhfc3luY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIg KmRhdGEsDQotCQkJICAgICAgIHNpemVfdCBsZWZ0LCBsb2ZmX3QgcG9zLCBsb2ZmX3QgKnBwb3Mp DQorc3RhdGljIHNzaXplX3QNCitjZXBoX3N5bmNfZGlyZWN0X3dyaXRlKHN0cnVjdCBraW9jYiAq aW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsDQorCQkgICAgICAgdW5zaWduZWQgbG9uZyBu cl9zZWdzLCBzaXplX3QgY291bnQpDQogew0KKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtp X2ZpbHA7DQogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOw0KIAlzdHJ1 Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSA9IGNlcGhfaW5vZGUoaW5vZGUpOw0KIAlzdHJ1Y3QgY2Vw aF9mc19jbGllbnQgKmZzYyA9IGNlcGhfaW5vZGVfdG9fY2xpZW50KGlub2RlKTsNCkBAIC01NzEs NTkgKzU3Myw1NSBAQCBzdGF0aWMgc3NpemVfdCBjZXBoX3N5bmNfd3JpdGUoc3RydWN0IGZpbGUg KmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLA0KIAlpbnQgd3JpdHRlbiA9IDA7DQogCWlu dCBmbGFnczsNCiAJaW50IGNoZWNrX2NhcHMgPSAwOw0KLQlpbnQgcGFnZV9hbGlnbiwgaW9fYWxp Z247DQotCXVuc2lnbmVkIGxvbmcgYnVmX2FsaWduOw0KLQlpbnQgcmV0Ow0KKwlpbnQgcGFnZV9h bGlnbjsNCisJaW50IHJldCwgaTsNCiAJc3RydWN0IHRpbWVzcGVjIG10aW1lID0gQ1VSUkVOVF9U SU1FOw0KLQlib29sIG93bl9wYWdlcyA9IGZhbHNlOw0KKwlsb2ZmX3QgcG9zID0gaW9jYi0+a2lf cG9zOw0KIA0KIAlpZiAoY2VwaF9zbmFwKGZpbGVfaW5vZGUoZmlsZSkpICE9IENFUEhfTk9TTkFQ KQ0KIAkJcmV0dXJuIC1FUk9GUzsNCiANCi0JZG91dCgic3luY193cml0ZSBvbiBmaWxlICVwICVs bGR+JXUgJXNcbiIsIGZpbGUsIHBvcywNCi0JICAgICAodW5zaWduZWQpbGVmdCwgKGZpbGUtPmZf ZmxhZ3MgJiBPX0RJUkVDVCkgPyAiT19ESVJFQ1QiIDogIiIpOw0KKwlkb3V0KCJzeW5jX2RpcmVj dF93cml0ZSBvbiBmaWxlICVwICVsbGR+JXVcbiIsIGZpbGUsIHBvcywNCisJICAgICAodW5zaWdu ZWQpY291bnQpOw0KIA0KLQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlub2Rl LT5pX21hcHBpbmcsIHBvcywgcG9zICsgbGVmdCk7DQorCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5k X3dhaXRfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgcG9zLCBwb3MgKyBjb3VudCk7DQogCWlmIChy ZXQgPCAwKQ0KIAkJcmV0dXJuIHJldDsNCiANCiAJcmV0ID0gaW52YWxpZGF0ZV9pbm9kZV9wYWdl czJfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywNCiAJCQkJCSAgICBwb3MgPj4gUEFHRV9DQUNIRV9T SElGVCwNCi0JCQkJCSAgICAocG9zICsgbGVmdCkgPj4gUEFHRV9DQUNIRV9TSElGVCk7DQorCQkJ CQkgICAgKHBvcyArIGNvdW50KSA+PiBQQUdFX0NBQ0hFX1NISUZUKTsNCiAJaWYgKHJldCA8IDAp DQogCQlkb3V0KCJpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSByZXR1cm5lZCAlZFxuIiwg cmV0KTsNCiANCiAJZmxhZ3MgPSBDRVBIX09TRF9GTEFHX09SREVSU05BUCB8DQogCQlDRVBIX09T RF9GTEFHX09ORElTSyB8DQogCQlDRVBIX09TRF9GTEFHX1dSSVRFOw0KLQlpZiAoKGZpbGUtPmZf ZmxhZ3MgJiAoT19TWU5DfE9fRElSRUNUKSkgPT0gMCkNCi0JCWZsYWdzIHw9IENFUEhfT1NEX0ZM QUdfQUNLOw0KLQllbHNlDQotCQludW1fb3BzKys7CS8qIEFsc28gaW5jbHVkZSBhICdzdGFydHN5 bmMnIGNvbW1hbmQuICovDQorCW51bV9vcHMrKzsJLyogQWxzbyBpbmNsdWRlIGEgJ3N0YXJ0c3lu YycgY29tbWFuZC4gKi8NCiANCi0JLyoNCi0JICogd2UgbWF5IG5lZWQgdG8gZG8gbXVsdGlwbGUg d3JpdGVzIGhlcmUgaWYgd2Ugc3BhbiBhbiBvYmplY3QNCi0JICogYm91bmRhcnkuICB0aGlzIGlz bid0IGF0b21pYywgdW5mb3J0dW5hdGVseS4gIDooDQotCSAqLw0KLW1vcmU6DQotCWlvX2FsaWdu ID0gcG9zICYgflBBR0VfTUFTSzsNCi0JYnVmX2FsaWduID0gKHVuc2lnbmVkIGxvbmcpZGF0YSAm IH5QQUdFX01BU0s7DQotCWxlbiA9IGxlZnQ7DQorCWZvciAoaSA9IDA7IGkgPCBucl9zZWdzICYm IGNvdW50OyBpKyspIHsNCisJCXZvaWQgX191c2VyICpkYXRhID0gaW92W2ldLmlvdl9iYXNlOw0K KwkJc2l6ZV90IGxlZnQ7DQogDQotCXNuYXBjID0gY2ktPmlfc25hcF9yZWFsbS0+Y2FjaGVkX2Nv bnRleHQ7DQotCXZpbm8gPSBjZXBoX3Zpbm8oaW5vZGUpOw0KLQlyZXEgPSBjZXBoX29zZGNfbmV3 X3JlcXVlc3QoJmZzYy0+Y2xpZW50LT5vc2RjLCAmY2ktPmlfbGF5b3V0LA0KLQkJCQkgICAgdmlu bywgcG9zLCAmbGVuLCBudW1fb3BzLA0KLQkJCQkgICAgQ0VQSF9PU0RfT1BfV1JJVEUsIGZsYWdz LCBzbmFwYywNCi0JCQkJICAgIGNpLT5pX3RydW5jYXRlX3NlcSwgY2ktPmlfdHJ1bmNhdGVfc2l6 ZSwNCi0JCQkJICAgIGZhbHNlKTsNCi0JaWYgKElTX0VSUihyZXEpKQ0KLQkJcmV0dXJuIFBUUl9F UlIocmVxKTsNCisJCWxlZnQgPSBtaW4oY291bnQsIGlvdltpXS5pb3ZfbGVuKTsNCittb3JlOg0K KwkJcGFnZV9hbGlnbiA9ICh1bnNpZ25lZCBsb25nKWRhdGEgJiB+UEFHRV9NQVNLOw0KKwkJbGVu ID0gbGVmdDsNCisNCisJCXNuYXBjID0gY2ktPmlfc25hcF9yZWFsbS0+Y2FjaGVkX2NvbnRleHQ7 DQorCQl2aW5vID0gY2VwaF92aW5vKGlub2RlKTsNCisJCXJlcSA9IGNlcGhfb3NkY19uZXdfcmVx dWVzdCgmZnNjLT5jbGllbnQtPm9zZGMsICZjaS0+aV9sYXlvdXQsDQorCQkJCQkgICAgdmlubywg cG9zLCAmbGVuLCBudW1fb3BzLA0KKwkJCQkJICAgIENFUEhfT1NEX09QX1dSSVRFLCBmbGFncywg c25hcGMsDQorCQkJCQkgICAgY2ktPmlfdHJ1bmNhdGVfc2VxLA0KKwkJCQkJICAgIGNpLT5pX3Ry dW5jYXRlX3NpemUsDQorCQkJCQkgICAgZmFsc2UpOw0KKwkJaWYgKElTX0VSUihyZXEpKSB7DQor CQkJcmV0ID0gUFRSX0VSUihyZXEpOw0KKwkJCWdvdG8gb3V0Ow0KKwkJfQ0KIA0KLQkvKiB3cml0 ZSBmcm9tIGJlZ2lubmluZyBvZiBmaXJzdCBwYWdlLCByZWdhcmRsZXNzIG9mIGlvIGFsaWdubWVu dCAqLw0KLQlwYWdlX2FsaWduID0gZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUID8gYnVmX2FsaWdu IDogaW9fYWxpZ247DQotCW51bV9wYWdlcyA9IGNhbGNfcGFnZXNfZm9yKHBhZ2VfYWxpZ24sIGxl bik7DQotCWlmIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpIHsNCisJCW51bV9wYWdlcyA9IGNh bGNfcGFnZXNfZm9yKHBhZ2VfYWxpZ24sIGxlbik7DQogCQlwYWdlcyA9IGNlcGhfZ2V0X2RpcmVj dF9wYWdlX3ZlY3RvcihkYXRhLCBudW1fcGFnZXMsIGZhbHNlKTsNCiAJCWlmIChJU19FUlIocGFn ZXMpKSB7DQogCQkJcmV0ID0gUFRSX0VSUihwYWdlcyk7DQpAQCAtNjM1LDYxICs2MzMsMjE1IEBA IG1vcmU6DQogCQkgKiBtYXkgYmxvY2suDQogCQkgKi8NCiAJCXRydW5jYXRlX2lub2RlX3BhZ2Vz X3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHBvcywNCi0JCQkJCSAgIChwb3MrbGVuKSB8IChQQUdF X0NBQ0hFX1NJWkUtMSkpOw0KLQl9IGVsc2Ugew0KKwkJCQkgICAocG9zK2xlbikgfCAoUEFHRV9D QUNIRV9TSVpFLTEpKTsNCisJCW9zZF9yZXFfb3BfZXh0ZW50X29zZF9kYXRhX3BhZ2VzKHJlcSwg MCwgcGFnZXMsIGxlbiwgcGFnZV9hbGlnbiwNCisJCQkJCQlmYWxzZSwgZmFsc2UpOw0KKw0KKwkJ LyogQlVHX09OKHZpbm8uc25hcCAhPSBDRVBIX05PU05BUCk7ICovDQorCQljZXBoX29zZGNfYnVp bGRfcmVxdWVzdChyZXEsIHBvcywgc25hcGMsIHZpbm8uc25hcCwgJm10aW1lKTsNCisNCisJCXJl dCA9IGNlcGhfb3NkY19zdGFydF9yZXF1ZXN0KCZmc2MtPmNsaWVudC0+b3NkYywgcmVxLCBmYWxz ZSk7DQorCQlpZiAoIXJldCkNCisJCQlyZXQgPSBjZXBoX29zZGNfd2FpdF9yZXF1ZXN0KCZmc2Mt PmNsaWVudC0+b3NkYywgcmVxKTsNCisNCisJCWNlcGhfcHV0X3BhZ2VfdmVjdG9yKHBhZ2VzLCBu dW1fcGFnZXMsIGZhbHNlKTsNCisNCitvdXQ6DQorCQljZXBoX29zZGNfcHV0X3JlcXVlc3QocmVx KTsNCisJCWlmIChyZXQgPT0gMCkgew0KKwkJCXBvcyArPSBsZW47DQorCQkJd3JpdHRlbiArPSBs ZW47DQorCQkJbGVmdCAtPSBsZW47DQorCQkJY291bnQgLT0gbGVuOw0KKwkJCWRhdGEgKz0gbGVu Ow0KKwkJCWlmIChsZWZ0KQ0KKwkJCQlnb3RvIG1vcmU7DQorDQorCQkJcmV0ID0gd3JpdHRlbjsN CisJCQlpZiAocG9zID4gaV9zaXplX3JlYWQoaW5vZGUpKQ0KKwkJCQljaGVja19jYXBzID0gY2Vw aF9pbm9kZV9zZXRfc2l6ZShpbm9kZSwgcG9zKTsNCisJCQkJaWYgKGNoZWNrX2NhcHMpDQorCQkJ CQljZXBoX2NoZWNrX2NhcHMoY2VwaF9pbm9kZShpbm9kZSksDQorCQkJCQkJCUNIRUNLX0NBUFNf QVVUSE9OTFksDQorCQkJCQkJCU5VTEwpOw0KKwkJfSBlbHNlIHsNCisJCQlpZiAocmV0ICE9IC1F T0xEU05BUEMgJiYgd3JpdHRlbiA+IDApDQorCQkJCXJldCA9IHdyaXR0ZW47DQorCQkJYnJlYWs7 DQorCQl9DQorCX0NCisNCisJaWYgKHJldCA+IDApDQorCQlpb2NiLT5raV9wb3MgPSBwb3M7DQor CXJldHVybiByZXQ7DQorfQ0KKw0KKw0KKy8qDQorICogU3luY2hyb25vdXMgd3JpdGUsIHN0cmFp Z2h0IGZyb20gX191c2VyIHBvaW50ZXIgb3IgdXNlciBwYWdlcy4NCisgKg0KKyAqIElmIHdyaXRl IHNwYW5zIG9iamVjdCBib3VuZGFyeSwganVzdCBkbyBtdWx0aXBsZSB3cml0ZXMuICAoRm9yIGEN CisgKiBjb3JyZWN0IGF0b21pYyB3cml0ZSwgd2Ugc2hvdWxkIGUuZy4gdGFrZSB3cml0ZSBsb2Nr cyBvbiBhbGwNCisgKiBvYmplY3RzLCByb2xsYmFjayBvbiBmYWlsdXJlLCBldGMuKQ0KKyAqLw0K K3N0YXRpYyBzc2l6ZV90IGNlcGhfc3luY193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0 IHN0cnVjdCBpb3ZlYyAqaW92LA0KKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIHNp emVfdCBjb3VudCkNCit7DQorCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsNCisJ c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7DQorCXN0cnVjdCBjZXBoX2lu b2RlX2luZm8gKmNpID0gY2VwaF9pbm9kZShpbm9kZSk7DQorCXN0cnVjdCBjZXBoX2ZzX2NsaWVu dCAqZnNjID0gY2VwaF9pbm9kZV90b19jbGllbnQoaW5vZGUpOw0KKwlzdHJ1Y3QgY2VwaF9zbmFw X2NvbnRleHQgKnNuYXBjOw0KKwlzdHJ1Y3QgY2VwaF92aW5vIHZpbm87DQorCXN0cnVjdCBjZXBo X29zZF9yZXF1ZXN0ICpyZXE7DQorCWludCBudW1fb3BzID0gMTsNCisJc3RydWN0IHBhZ2UgKipw YWdlczsNCisJaW50IG51bV9wYWdlczsNCisJdTY0IGxlbjsNCisJaW50IHdyaXR0ZW4gPSAwOw0K KwlpbnQgZmxhZ3M7DQorCWludCBjaGVja19jYXBzID0gMDsNCisJaW50IHJldDsNCisJc3RydWN0 IHRpbWVzcGVjIG10aW1lID0gQ1VSUkVOVF9USU1FOw0KKwlsb2ZmX3QgcG9zID0gaW9jYi0+a2lf cG9zOw0KKwlzdHJ1Y3QgaW92X2l0ZXIgaTsNCisNCisJaWYgKGNlcGhfc25hcChmaWxlX2lub2Rl KGZpbGUpKSAhPSBDRVBIX05PU05BUCkNCisJCXJldHVybiAtRVJPRlM7DQorDQorCWRvdXQoInN5 bmNfd3JpdGUgb24gZmlsZSAlcCAlbGxkfiV1XG4iLCBmaWxlLCBwb3MsICh1bnNpZ25lZCljb3Vu dCk7DQorDQorCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtPmlfbWFw cGluZywgcG9zLCBwb3MgKyBjb3VudCk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsN CisNCisJcmV0ID0gaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoaW5vZGUtPmlfbWFwcGlu ZywNCisJCQkJCSAgICBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVCwNCisJCQkJCSAgICAocG9zICsg Y291bnQpID4+IFBBR0VfQ0FDSEVfU0hJRlQpOw0KKwlpZiAocmV0IDwgMCkNCisJCWRvdXQoImlu dmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlIHJldHVybmVkICVkXG4iLCByZXQpOw0KKw0KKwlm bGFncyA9IENFUEhfT1NEX0ZMQUdfT1JERVJTTkFQIHwNCisJCUNFUEhfT1NEX0ZMQUdfT05ESVNL IHwNCisJCUNFUEhfT1NEX0ZMQUdfV1JJVEUgfA0KKwkJQ0VQSF9PU0RfRkxBR19BQ0s7DQorDQor CWlvdl9pdGVyX2luaXQoJmksIGlvdiwgbnJfc2VncywgY291bnQsIDApOw0KKw0KKwl3aGlsZSAo aS5jb3VudCkgew0KKwkJdm9pZCBfX3VzZXIgKmRhdGE7DQorCQlzaXplX3QgbGVmdDsNCisNCisJ CWxlZnQgPSBpLmNvdW50Ow0KK21vcmU6DQorCQlsZW4gPSBsZWZ0Ow0KKw0KKwkJc25hcGMgPSBj aS0+aV9zbmFwX3JlYWxtLT5jYWNoZWRfY29udGV4dDsNCisJCXZpbm8gPSBjZXBoX3Zpbm8oaW5v ZGUpOw0KKwkJcmVxID0gY2VwaF9vc2RjX25ld19yZXF1ZXN0KCZmc2MtPmNsaWVudC0+b3NkYywg JmNpLT5pX2xheW91dCwNCisJCQkJCSAgICB2aW5vLCBwb3MsICZsZW4sIG51bV9vcHMsDQorCQkJ CQkgICAgQ0VQSF9PU0RfT1BfV1JJVEUsIGZsYWdzLCBzbmFwYywNCisJCQkJCSAgICBjaS0+aV90 cnVuY2F0ZV9zZXEsDQorCQkJCQkgICAgY2ktPmlfdHJ1bmNhdGVfc2l6ZSwNCisJCQkJCSAgICBm YWxzZSk7DQorCQlpZiAoSVNfRVJSKHJlcSkpIHsNCisJCQlyZXQgPSBQVFJfRVJSKHJlcSk7DQor CQkJZ290byBvdXQ7DQorCQl9DQorDQorCQkvKg0KKwkJICogd3JpdGUgZnJvbSBiZWdpbm5pbmcg b2YgZmlyc3QgcGFnZSwNCisJCSAqIHJlZ2FyZGxlc3Mgb2YgaW8gYWxpZ25tZW50DQorCQkgKi8N CisJCW51bV9wYWdlcyA9IChsZW4gKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hF X1NISUZUOw0KKw0KIAkJcGFnZXMgPSBjZXBoX2FsbG9jX3BhZ2VfdmVjdG9yKG51bV9wYWdlcywg R0ZQX05PRlMpOw0KIAkJaWYgKElTX0VSUihwYWdlcykpIHsNCiAJCQlyZXQgPSBQVFJfRVJSKHBh Z2VzKTsNCiAJCQlnb3RvIG91dDsNCiAJCX0NCi0JCXJldCA9IGNlcGhfY29weV91c2VyX3RvX3Bh Z2VfdmVjdG9yKHBhZ2VzLCBkYXRhLCBwb3MsIGxlbik7DQorCQlpZiAobGVuIDw9IGkuaW92WzBd Lmlvdl9sZW4gLSBpLmlvdl9vZmZzZXQpIHsNCisJCQlkYXRhID0gaS5pb3ZbMF0uaW92X2Jhc2Ug KyBpLmlvdl9vZmZzZXQ7DQorCQkJcmV0ID0gY2VwaF9jb3B5X3VzZXJfdG9fcGFnZV92ZWN0b3Io cGFnZXMsDQorCQkJCQkJCSAgICBkYXRhLCAwLCBsZW4pOw0KKw0KKwkJCWlmIChyZXQgPiAwKQ0K KwkJCQlpb3ZfaXRlcl9hZHZhbmNlKCZpLCByZXQpOw0KKwkJfSBlbHNlIHsNCisJCQlpbnQgbCwg ayA9IDAsIGNvcHllZCA9IDA7DQorCQkJc2l6ZV90IHRtcCA9IGxlbjsNCisNCisJCQl3aGlsZSAo dG1wKSB7DQorCQkJCWRhdGEgPSBpLmlvdlswXS5pb3ZfYmFzZSArIGkuaW92X29mZnNldDsNCisJ CQkJbCA9IGkuaW92WzBdLmlvdl9sZW4gLSBpLmlvdl9vZmZzZXQ7DQorDQorCQkJCWlmICh0bXAg PCBsKSB7DQorCQkJCQlyZXQgPSBjZXBoX2NvcHlfdXNlcl90b19wYWdlX3ZlY3RvcigmcGFnZXNb a10sDQorCQkJCQkJCQkJICAgIGRhdGEsDQorCQkJCQkJCQkJICAgIGNvcHllZCwNCisJCQkJCQkJ CQkgICAgdG1wKTsNCisJCQkJCWlmIChyZXQgPiAwKQ0KKwkJCQkJCWlvdl9pdGVyX2FkdmFuY2Uo JmksIHJldCk7DQorCQkJCQlicmVhazsNCisJCQkJfSBlbHNlIGlmIChsKSB7DQorCQkJCQlyZXQg PSBjZXBoX2NvcHlfdXNlcl90b19wYWdlX3ZlY3RvcigmcGFnZXNba10sDQorCQkJCQkJCQkJICAg IGRhdGEsDQorCQkJCQkJCQkJICAgIGNvcHllZCwNCisJCQkJCQkJCQkgICAgbCk7DQorCQkJCQlp ZiAocmV0IDwgMCkNCisJCQkJCQlicmVhazsNCisJCQkJCWlvdl9pdGVyX2FkdmFuY2UoJmksIHJl dCk7DQorCQkJCQljb3B5ZWQgKz0gcmV0Ow0KKwkJCQkJdG1wIC09IHJldDsNCisJCQkJCWsgPSBj YWxjX3BhZ2VzX2ZvcigwLCBjb3B5ZWQgKyAxKSAtIDE7DQorCQkJCX0NCisJCQl9DQorCQl9DQor DQogCQlpZiAocmV0IDwgMCkgew0KIAkJCWNlcGhfcmVsZWFzZV9wYWdlX3ZlY3RvcihwYWdlcywg bnVtX3BhZ2VzKTsNCiAJCQlnb3RvIG91dDsNCiAJCX0NCiANCi0JCWlmICgoZmlsZS0+Zl9mbGFn cyAmIE9fU1lOQykgPT0gMCkgew0KLQkJCS8qIGdldCBhIHNlY29uZCBjb21taXQgY2FsbGJhY2sg Ki8NCi0JCQlyZXEtPnJfdW5zYWZlX2NhbGxiYWNrID0gY2VwaF9zeW5jX3dyaXRlX3Vuc2FmZTsN Ci0JCQlyZXEtPnJfaW5vZGUgPSBpbm9kZTsNCi0JCQlvd25fcGFnZXMgPSB0cnVlOw0KLQkJfQ0K LQl9DQotCW9zZF9yZXFfb3BfZXh0ZW50X29zZF9kYXRhX3BhZ2VzKHJlcSwgMCwgcGFnZXMsIGxl biwgcGFnZV9hbGlnbiwNCi0JCQkJCWZhbHNlLCBvd25fcGFnZXMpOw0KKwkJLyogZ2V0IGEgc2Vj b25kIGNvbW1pdCBjYWxsYmFjayAqLw0KKwkJcmVxLT5yX3Vuc2FmZV9jYWxsYmFjayA9IGNlcGhf c3luY193cml0ZV91bnNhZmU7DQorCQlyZXEtPnJfaW5vZGUgPSBpbm9kZTsNCiANCi0JLyogQlVH X09OKHZpbm8uc25hcCAhPSBDRVBIX05PU05BUCk7ICovDQotCWNlcGhfb3NkY19idWlsZF9yZXF1 ZXN0KHJlcSwgcG9zLCBzbmFwYywgdmluby5zbmFwLCAmbXRpbWUpOw0KKwkJb3NkX3JlcV9vcF9l eHRlbnRfb3NkX2RhdGFfcGFnZXMocmVxLCAwLCBwYWdlcywgbGVuLCAwLA0KKwkJCQkJCWZhbHNl LCB0cnVlKTsNCiANCi0JcmV0ID0gY2VwaF9vc2RjX3N0YXJ0X3JlcXVlc3QoJmZzYy0+Y2xpZW50 LT5vc2RjLCByZXEsIGZhbHNlKTsNCi0JaWYgKCFyZXQpDQotCQlyZXQgPSBjZXBoX29zZGNfd2Fp dF9yZXF1ZXN0KCZmc2MtPmNsaWVudC0+b3NkYywgcmVxKTsNCisJCS8qIEJVR19PTih2aW5vLnNu YXAgIT0gQ0VQSF9OT1NOQVApOyAqLw0KKwkJY2VwaF9vc2RjX2J1aWxkX3JlcXVlc3QocmVxLCBw b3MsIHNuYXBjLCB2aW5vLnNuYXAsICZtdGltZSk7DQogDQotCWlmIChmaWxlLT5mX2ZsYWdzICYg T19ESVJFQ1QpDQotCQljZXBoX3B1dF9wYWdlX3ZlY3RvcihwYWdlcywgbnVtX3BhZ2VzLCBmYWxz ZSk7DQotCWVsc2UgaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpDQotCQljZXBoX3JlbGVhc2Vf cGFnZV92ZWN0b3IocGFnZXMsIG51bV9wYWdlcyk7DQorCQlyZXQgPSBjZXBoX29zZGNfc3RhcnRf cmVxdWVzdCgmZnNjLT5jbGllbnQtPm9zZGMsIHJlcSwgZmFsc2UpOw0KKwkJaWYgKCFyZXQpDQor CQkJcmV0ID0gY2VwaF9vc2RjX3dhaXRfcmVxdWVzdCgmZnNjLT5jbGllbnQtPm9zZGMsIHJlcSk7 DQogDQogb3V0Og0KLQljZXBoX29zZGNfcHV0X3JlcXVlc3QocmVxKTsNCi0JaWYgKHJldCA9PSAw KSB7DQotCQlwb3MgKz0gbGVuOw0KLQkJd3JpdHRlbiArPSBsZW47DQotCQlsZWZ0IC09IGxlbjsN Ci0JCWRhdGEgKz0gbGVuOw0KLQkJaWYgKGxlZnQpDQotCQkJZ290byBtb3JlOw0KLQ0KLQkJcmV0 ID0gd3JpdHRlbjsNCi0JCSpwcG9zID0gcG9zOw0KLQkJaWYgKHBvcyA+IGlfc2l6ZV9yZWFkKGlu b2RlKSkNCi0JCQljaGVja19jYXBzID0gY2VwaF9pbm9kZV9zZXRfc2l6ZShpbm9kZSwgcG9zKTsN Ci0JCWlmIChjaGVja19jYXBzKQ0KLQkJCWNlcGhfY2hlY2tfY2FwcyhjZXBoX2lub2RlKGlub2Rl KSwgQ0hFQ0tfQ0FQU19BVVRIT05MWSwNCi0JCQkJCU5VTEwpOw0KLQl9IGVsc2UgaWYgKHJldCAh PSAtRU9MRFNOQVBDICYmIHdyaXR0ZW4gPiAwKSB7DQotCQlyZXQgPSB3cml0dGVuOw0KKwkJY2Vw aF9vc2RjX3B1dF9yZXF1ZXN0KHJlcSk7DQorCQlpZiAocmV0ID09IDApIHsNCisJCQlwb3MgKz0g bGVuOw0KKwkJCXdyaXR0ZW4gKz0gbGVuOw0KKwkJCWxlZnQgLT0gbGVuOw0KKwkJCWlmIChsZWZ0 KQ0KKwkJCQlnb3RvIG1vcmU7DQorDQorCQkJcmV0ID0gd3JpdHRlbjsNCisJCQlpZiAocG9zID4g aV9zaXplX3JlYWQoaW5vZGUpKQ0KKwkJCQljaGVja19jYXBzID0gY2VwaF9pbm9kZV9zZXRfc2l6 ZShpbm9kZSwgcG9zKTsNCisJCQkJaWYgKGNoZWNrX2NhcHMpDQorCQkJCQljZXBoX2NoZWNrX2Nh cHMoY2VwaF9pbm9kZShpbm9kZSksDQorCQkJCQkJCUNIRUNLX0NBUFNfQVVUSE9OTFksDQorCQkJ CQkJCU5VTEwpOw0KKwkJfSBlbHNlIHsNCisJCQlpZiAocmV0ICE9IC1FT0xEU05BUEMgJiYgd3Jp dHRlbiA+IDApDQorCQkJCXJldCA9IHdyaXR0ZW47DQorCQkJYnJlYWs7DQorCQl9DQogCX0NCisN CisJaWYgKHJldCA+IDApDQorCQlpb2NiLT5raV9wb3MgPSBwb3M7DQogCXJldHVybiByZXQ7DQog fQ0KIA0KQEAgLTg0NCwxMSArOTk2LDEzIEBAIHJldHJ5X3NuYXA6DQogCSAgICAgaW5vZGUsIGNl cGhfdmlub3AoaW5vZGUpLCBwb3MsIGNvdW50LCBjZXBoX2NhcF9zdHJpbmcoZ290KSk7DQogDQog CWlmICgoZ290ICYgKENFUEhfQ0FQX0ZJTEVfQlVGRkVSfENFUEhfQ0FQX0ZJTEVfTEFaWUlPKSkg PT0gMCB8fA0KLQkgICAgKGlvY2ItPmtpX2ZpbHAtPmZfZmxhZ3MgJiBPX0RJUkVDVCkgfHwNCi0J ICAgIChmaS0+ZmxhZ3MgJiBDRVBIX0ZfU1lOQykpIHsNCisJICAgIChmaWxlLT5mX2ZsYWdzICYg T19ESVJFQ1QpIHx8IChmaS0+ZmxhZ3MgJiBDRVBIX0ZfU1lOQykpIHsNCiAJCW11dGV4X3VubG9j aygmaW5vZGUtPmlfbXV0ZXgpOw0KLQkJd3JpdHRlbiA9IGNlcGhfc3luY193cml0ZShmaWxlLCBp b3YtPmlvdl9iYXNlLCBjb3VudCwNCi0JCQkJCSAgcG9zLCAmaW9jYi0+a2lfcG9zKTsNCisJCWlm IChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpDQorCQkJd3JpdHRlbiA9IGNlcGhfc3luY19kaXJl Y3Rfd3JpdGUoaW9jYiwgaW92LA0KKwkJCQkJCQkgbnJfc2VncywgY291bnQpOw0KKwkJZWxzZQ0K KwkJCXdyaXR0ZW4gPSBjZXBoX3N5bmNfd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBjb3VudCk7 DQogCQlpZiAod3JpdHRlbiA9PSAtRU9MRFNOQVBDKSB7DQogCQkJZG91dCgiYWlvX3dyaXRlICVw ICVsbHguJWxseCAlbGx1fiV1Ig0KIAkJCQkiZ290IEVPTERTTkFQQywgcmV0cnlpbmdcbiIsDQot LSANCjEuOC4xLjINCg==