From mboxrd@z Thu Jan 1 00:00:00 1970 From: majianpeng Subject: [PATCH 2/2] ceph: Implement writev/pwritev for sync operation. Date: Tue, 3 Sep 2013 16:52:14 +0800 Message-ID: <201309031652122920661@gmail.com> Reply-To: majianpeng Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: base64 Cc: =?us-ascii?B?WWFuLCBaaGVuZw==?= , ceph-devel , linux-fsdevel To: sage Return-path: Received: from mail-pd0-f181.google.com ([209.85.192.181]:61419 "EHLO mail-pd0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759807Ab3ICIwR (ORCPT ); Tue, 3 Sep 2013 04:52:17 -0400 Sender: linux-fsdevel-owner@vger.kernel.org List-ID: Rm9yIHdyaXRldi9wd3JpdGV2IHN5bmMtb3BlcmF0b2luLCBjZXBoIG9ubHkgZG8gdGhlIGZpcnN0 IGlvdi4NCkl0IGRvbid0IHRoaW5rIG90aGVyIGlvdnMuTm93IGltcGxlbWVudCB0aGlzLg0KSSBk aXZpZGVkIHRoZSB3cml0ZS1zeW5jLW9wZXJhdGlvbiBpbnRvIHR3byBmdW5jdGlvbnMuT25lIGZv cg0KZGlyZWN0LXdyaXRlLG90aGVyIGZvciBub25lLWRpcmVjdC1zeW5jLXdyaXRlLlRoaXMgaXMg YmVjYXVzZSBmb3INCm5vbmUtZGlyZWN0LXN5bmMtd3JpdGUgd2UgY2FuIG1lcmdlIGlvdnMgdG8g b25lLkJ1dCBmb3IgZGlyZWN0LXdyaXRlLA0Kd2UgY2FuJ3QgbWVyZ2UgaW92cy4NCg0KU2lnbmVk LW9mZi1ieTogSmlhbnBlbmcgTWEgPG1hamlhbnBlbmdAZ21haWwuY29tPg0KLS0tDQogZnMvY2Vw aC9maWxlLmMgfCAzMjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tDQogMSBmaWxlIGNoYW5nZWQsIDI0OCBpbnNlcnRpb25zKCspLCA4MCBk ZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZmlsZS5jIGIvZnMvY2VwaC9maWxl LmMNCmluZGV4IDdkNmEzZWUuLjQyYzk3YjMgMTAwNjQ0DQotLS0gYS9mcy9jZXBoL2ZpbGUuYw0K KysrIGIvZnMvY2VwaC9maWxlLmMNCkBAIC01MzMsMTcgKzUzMywxOSBAQCBzdGF0aWMgdm9pZCBj ZXBoX3N5bmNfd3JpdGVfdW5zYWZlKHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEsIGJvb2wg dW5zYWZlKQ0KIAl9DQogfQ0KIA0KKw0KIC8qDQotICogU3luY2hyb25vdXMgd3JpdGUsIHN0cmFp Z2h0IGZyb20gX191c2VyIHBvaW50ZXIgb3IgdXNlciBwYWdlcyAoaWYNCi0gKiBPX0RJUkVDVCku DQorICogU3luY2hyb25vdXMgd3JpdGUsIHN0cmFpZ2h0IGZyb20gX191c2VyIHBvaW50ZXIgb3Ig dXNlciBwYWdlcy4NCiAgKg0KICAqIElmIHdyaXRlIHNwYW5zIG9iamVjdCBib3VuZGFyeSwganVz dCBkbyBtdWx0aXBsZSB3cml0ZXMuICAoRm9yIGENCiAgKiBjb3JyZWN0IGF0b21pYyB3cml0ZSwg d2Ugc2hvdWxkIGUuZy4gdGFrZSB3cml0ZSBsb2NrcyBvbiBhbGwNCiAgKiBvYmplY3RzLCByb2xs YmFjayBvbiBmYWlsdXJlLCBldGMuKQ0KICAqLw0KLXN0YXRpYyBzc2l6ZV90IGNlcGhfc3luY193 cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsDQotCQkJICAg ICAgIHNpemVfdCBsZWZ0LCBsb2ZmX3QgcG9zLCBsb2ZmX3QgKnBwb3MpDQorc3RhdGljIHNzaXpl X3QNCitjZXBoX3N5bmNfZGlyZWN0X3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3Ry dWN0IGlvdmVjICppb3YsDQorCQkgICAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBzaXplX3Qg Y291bnQpDQogew0KKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7DQogCXN0cnVj dCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOw0KIAlzdHJ1Y3QgY2VwaF9pbm9kZV9p bmZvICpjaSA9IGNlcGhfaW5vZGUoaW5vZGUpOw0KIAlzdHJ1Y3QgY2VwaF9mc19jbGllbnQgKmZz YyA9IGNlcGhfaW5vZGVfdG9fY2xpZW50KGlub2RlKTsNCkBAIC01NTcsNTkgKzU1OSw1NSBAQCBz dGF0aWMgc3NpemVfdCBjZXBoX3N5bmNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNo YXIgX191c2VyICpkYXRhLA0KIAlpbnQgd3JpdHRlbiA9IDA7DQogCWludCBmbGFnczsNCiAJaW50 IGNoZWNrX2NhcHMgPSAwOw0KLQlpbnQgcGFnZV9hbGlnbiwgaW9fYWxpZ247DQotCXVuc2lnbmVk IGxvbmcgYnVmX2FsaWduOw0KLQlpbnQgcmV0Ow0KKwlpbnQgcGFnZV9hbGlnbjsNCisJaW50IHJl dCwgaTsNCiAJc3RydWN0IHRpbWVzcGVjIG10aW1lID0gQ1VSUkVOVF9USU1FOw0KLQlib29sIG93 bl9wYWdlcyA9IGZhbHNlOw0KKwlsb2ZmX3QgcG9zID0gaW9jYi0+a2lfcG9zOw0KIA0KIAlpZiAo Y2VwaF9zbmFwKGZpbGVfaW5vZGUoZmlsZSkpICE9IENFUEhfTk9TTkFQKQ0KIAkJcmV0dXJuIC1F Uk9GUzsNCiANCi0JZG91dCgic3luY193cml0ZSBvbiBmaWxlICVwICVsbGR+JXUgJXNcbiIsIGZp bGUsIHBvcywNCi0JICAgICAodW5zaWduZWQpbGVmdCwgKGZpbGUtPmZfZmxhZ3MgJiBPX0RJUkVD VCkgPyAiT19ESVJFQ1QiIDogIiIpOw0KKwlkb3V0KCJzeW5jX2RpcmVjdF93cml0ZSBvbiBmaWxl ICVwICVsbGR+JXVcbiIsIGZpbGUsIHBvcywNCisJICAgICAodW5zaWduZWQpY291bnQpOw0KIA0K LQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHBv cywgcG9zICsgbGVmdCk7DQorCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5v ZGUtPmlfbWFwcGluZywgcG9zLCBwb3MgKyBjb3VudCk7DQogCWlmIChyZXQgPCAwKQ0KIAkJcmV0 dXJuIHJldDsNCiANCiAJcmV0ID0gaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoaW5vZGUt PmlfbWFwcGluZywNCiAJCQkJCSAgICBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVCwNCi0JCQkJCSAg ICAocG9zICsgbGVmdCkgPj4gUEFHRV9DQUNIRV9TSElGVCk7DQorCQkJCQkgICAgKHBvcyArIGNv dW50KSA+PiBQQUdFX0NBQ0hFX1NISUZUKTsNCiAJaWYgKHJldCA8IDApDQogCQlkb3V0KCJpbnZh bGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSByZXR1cm5lZCAlZFxuIiwgcmV0KTsNCiANCiAJZmxh Z3MgPSBDRVBIX09TRF9GTEFHX09SREVSU05BUCB8DQogCQlDRVBIX09TRF9GTEFHX09ORElTSyB8 DQogCQlDRVBIX09TRF9GTEFHX1dSSVRFOw0KLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiAoT19TWU5D fE9fRElSRUNUKSkgPT0gMCkNCi0JCWZsYWdzIHw9IENFUEhfT1NEX0ZMQUdfQUNLOw0KLQllbHNl DQotCQludW1fb3BzKys7CS8qIEFsc28gaW5jbHVkZSBhICdzdGFydHN5bmMnIGNvbW1hbmQuICov DQorCW51bV9vcHMrKzsJLyogQWxzbyBpbmNsdWRlIGEgJ3N0YXJ0c3luYycgY29tbWFuZC4gKi8N CiANCi0JLyoNCi0JICogd2UgbWF5IG5lZWQgdG8gZG8gbXVsdGlwbGUgd3JpdGVzIGhlcmUgaWYg d2Ugc3BhbiBhbiBvYmplY3QNCi0JICogYm91bmRhcnkuICB0aGlzIGlzbid0IGF0b21pYywgdW5m b3J0dW5hdGVseS4gIDooDQotCSAqLw0KLW1vcmU6DQotCWlvX2FsaWduID0gcG9zICYgflBBR0Vf TUFTSzsNCi0JYnVmX2FsaWduID0gKHVuc2lnbmVkIGxvbmcpZGF0YSAmIH5QQUdFX01BU0s7DQot CWxlbiA9IGxlZnQ7DQorCWZvciAoaSA9IDA7IGkgPCBucl9zZWdzICYmIGNvdW50OyBpKyspIHsN CisJCXZvaWQgX191c2VyICpkYXRhID0gaW92W2ldLmlvdl9iYXNlOw0KKwkJc2l6ZV90IGxlZnQ7 DQogDQotCXNuYXBjID0gY2ktPmlfc25hcF9yZWFsbS0+Y2FjaGVkX2NvbnRleHQ7DQotCXZpbm8g PSBjZXBoX3Zpbm8oaW5vZGUpOw0KLQlyZXEgPSBjZXBoX29zZGNfbmV3X3JlcXVlc3QoJmZzYy0+ Y2xpZW50LT5vc2RjLCAmY2ktPmlfbGF5b3V0LA0KLQkJCQkgICAgdmlubywgcG9zLCAmbGVuLCBu dW1fb3BzLA0KLQkJCQkgICAgQ0VQSF9PU0RfT1BfV1JJVEUsIGZsYWdzLCBzbmFwYywNCi0JCQkJ ICAgIGNpLT5pX3RydW5jYXRlX3NlcSwgY2ktPmlfdHJ1bmNhdGVfc2l6ZSwNCi0JCQkJICAgIGZh bHNlKTsNCi0JaWYgKElTX0VSUihyZXEpKQ0KLQkJcmV0dXJuIFBUUl9FUlIocmVxKTsNCisJCWxl ZnQgPSBtaW4oY291bnQsIGlvdltpXS5pb3ZfbGVuKTsNCittb3JlOg0KKwkJcGFnZV9hbGlnbiA9 ICh1bnNpZ25lZCBsb25nKWRhdGEgJiB+UEFHRV9NQVNLOw0KKwkJbGVuID0gbGVmdDsNCisNCisJ CXNuYXBjID0gY2ktPmlfc25hcF9yZWFsbS0+Y2FjaGVkX2NvbnRleHQ7DQorCQl2aW5vID0gY2Vw aF92aW5vKGlub2RlKTsNCisJCXJlcSA9IGNlcGhfb3NkY19uZXdfcmVxdWVzdCgmZnNjLT5jbGll bnQtPm9zZGMsICZjaS0+aV9sYXlvdXQsDQorCQkJCQkgICAgdmlubywgcG9zLCAmbGVuLCBudW1f b3BzLA0KKwkJCQkJICAgIENFUEhfT1NEX09QX1dSSVRFLCBmbGFncywgc25hcGMsDQorCQkJCQkg ICAgY2ktPmlfdHJ1bmNhdGVfc2VxLA0KKwkJCQkJICAgIGNpLT5pX3RydW5jYXRlX3NpemUsDQor CQkJCQkgICAgZmFsc2UpOw0KKwkJaWYgKElTX0VSUihyZXEpKSB7DQorCQkJcmV0ID0gUFRSX0VS UihyZXEpOw0KKwkJCWdvdG8gb3V0Ow0KKwkJfQ0KIA0KLQkvKiB3cml0ZSBmcm9tIGJlZ2lubmlu ZyBvZiBmaXJzdCBwYWdlLCByZWdhcmRsZXNzIG9mIGlvIGFsaWdubWVudCAqLw0KLQlwYWdlX2Fs aWduID0gZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUID8gYnVmX2FsaWduIDogaW9fYWxpZ247DQot CW51bV9wYWdlcyA9IGNhbGNfcGFnZXNfZm9yKHBhZ2VfYWxpZ24sIGxlbik7DQotCWlmIChmaWxl LT5mX2ZsYWdzICYgT19ESVJFQ1QpIHsNCisJCW51bV9wYWdlcyA9IGNhbGNfcGFnZXNfZm9yKHBh Z2VfYWxpZ24sIGxlbik7DQogCQlwYWdlcyA9IGNlcGhfZ2V0X2RpcmVjdF9wYWdlX3ZlY3Rvcihk YXRhLCBudW1fcGFnZXMsIGZhbHNlKTsNCiAJCWlmIChJU19FUlIocGFnZXMpKSB7DQogCQkJcmV0 ID0gUFRSX0VSUihwYWdlcyk7DQpAQCAtNjIxLDYxICs2MTksMjI5IEBAIG1vcmU6DQogCQkgKiBt YXkgYmxvY2suDQogCQkgKi8NCiAJCXRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlLT5p X21hcHBpbmcsIHBvcywNCi0JCQkJCSAgIChwb3MrbGVuKSB8IChQQUdFX0NBQ0hFX1NJWkUtMSkp Ow0KLQl9IGVsc2Ugew0KKwkJCQkgICAocG9zK2xlbikgfCAoUEFHRV9DQUNIRV9TSVpFLTEpKTsN CisJCW9zZF9yZXFfb3BfZXh0ZW50X29zZF9kYXRhX3BhZ2VzKHJlcSwgMCwgcGFnZXMsIGxlbiwg cGFnZV9hbGlnbiwNCisJCQkJCQlmYWxzZSwgZmFsc2UpOw0KKw0KKwkJLyogQlVHX09OKHZpbm8u c25hcCAhPSBDRVBIX05PU05BUCk7ICovDQorCQljZXBoX29zZGNfYnVpbGRfcmVxdWVzdChyZXEs IHBvcywgc25hcGMsIHZpbm8uc25hcCwgJm10aW1lKTsNCisNCisJCXJldCA9IGNlcGhfb3NkY19z dGFydF9yZXF1ZXN0KCZmc2MtPmNsaWVudC0+b3NkYywgcmVxLCBmYWxzZSk7DQorCQlpZiAoIXJl dCkNCisJCQlyZXQgPSBjZXBoX29zZGNfd2FpdF9yZXF1ZXN0KCZmc2MtPmNsaWVudC0+b3NkYywg cmVxKTsNCisNCisJCWNlcGhfcHV0X3BhZ2VfdmVjdG9yKHBhZ2VzLCBudW1fcGFnZXMsIGZhbHNl KTsNCisNCitvdXQ6DQorCQljZXBoX29zZGNfcHV0X3JlcXVlc3QocmVxKTsNCisJCWlmIChyZXQg PT0gMCkgew0KKwkJCXBvcyArPSBsZW47DQorCQkJd3JpdHRlbiArPSBsZW47DQorCQkJbGVmdCAt PSBsZW47DQorCQkJY291bnQgLT0gbGVuOw0KKwkJCWRhdGEgKz0gbGVuOw0KKwkJCWlmIChsZWZ0 KQ0KKwkJCQlnb3RvIG1vcmU7DQorDQorCQkJcmV0ID0gd3JpdHRlbjsNCisJCQlpZiAocG9zID4g aV9zaXplX3JlYWQoaW5vZGUpKQ0KKwkJCQljaGVja19jYXBzID0gY2VwaF9pbm9kZV9zZXRfc2l6 ZShpbm9kZSwgcG9zKTsNCisJCQkJaWYgKGNoZWNrX2NhcHMpDQorCQkJCQljZXBoX2NoZWNrX2Nh cHMoY2VwaF9pbm9kZShpbm9kZSksDQorCQkJCQkJCUNIRUNLX0NBUFNfQVVUSE9OTFksDQorCQkJ CQkJCU5VTEwpOw0KKwkJfSBlbHNlIHsNCisJCQlpZiAocmV0ICE9IC1FT0xEU05BUEMgJiYgd3Jp dHRlbiA+IDApDQorCQkJCXJldCA9IHdyaXR0ZW47DQorCQkJYnJlYWs7DQorCQl9DQorCX0NCisN CisJaWYgKHJldCA+IDApDQorCQlpb2NiLT5raV9wb3MgPSBwb3M7DQorCXJldHVybiByZXQ7DQor fQ0KKw0KKw0KKy8qDQorICogU3luY2hyb25vdXMgd3JpdGUsIHN0cmFpZ2h0IGZyb20gX191c2Vy IHBvaW50ZXIgb3IgdXNlciBwYWdlcy4NCisgKg0KKyAqIElmIHdyaXRlIHNwYW5zIG9iamVjdCBi b3VuZGFyeSwganVzdCBkbyBtdWx0aXBsZSB3cml0ZXMuICAoRm9yIGENCisgKiBjb3JyZWN0IGF0 b21pYyB3cml0ZSwgd2Ugc2hvdWxkIGUuZy4gdGFrZSB3cml0ZSBsb2NrcyBvbiBhbGwNCisgKiBv YmplY3RzLCByb2xsYmFjayBvbiBmYWlsdXJlLCBldGMuKQ0KKyAqLw0KK3N0YXRpYyBzc2l6ZV90 IGNlcGhfc3luY193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAq aW92LA0KKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIHNpemVfdCBjb3VudCkNCit7 DQorCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsNCisJc3RydWN0IGlub2RlICpp bm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7DQorCXN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpID0g Y2VwaF9pbm9kZShpbm9kZSk7DQorCXN0cnVjdCBjZXBoX2ZzX2NsaWVudCAqZnNjID0gY2VwaF9p bm9kZV90b19jbGllbnQoaW5vZGUpOw0KKwlzdHJ1Y3QgY2VwaF9zbmFwX2NvbnRleHQgKnNuYXBj Ow0KKwlzdHJ1Y3QgY2VwaF92aW5vIHZpbm87DQorCXN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpy ZXE7DQorCWludCBudW1fb3BzID0gMTsNCisJc3RydWN0IHBhZ2UgKipwYWdlczsNCisJaW50IG51 bV9wYWdlczsNCisJdTY0IGxlbjsNCisJaW50IHdyaXR0ZW4gPSAwOw0KKwlpbnQgZmxhZ3M7DQor CWludCBjaGVja19jYXBzID0gMDsNCisJaW50IHJldCwgaTsNCisJc3RydWN0IHRpbWVzcGVjIG10 aW1lID0gQ1VSUkVOVF9USU1FOw0KKwlsb2ZmX3QgcG9zID0gaW9jYi0+a2lfcG9zOw0KKwlzdHJ1 Y3QgaW92ZWMgKmlvdl9jbG9uZTsNCisNCisJaWYgKGNlcGhfc25hcChmaWxlX2lub2RlKGZpbGUp KSAhPSBDRVBIX05PU05BUCkNCisJCXJldHVybiAtRVJPRlM7DQorDQorCWRvdXQoInN5bmNfd3Jp dGUgb24gZmlsZSAlcCAlbGxkfiV1XG4iLCBmaWxlLCBwb3MsICh1bnNpZ25lZCljb3VudCk7DQor DQorCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywg cG9zLCBwb3MgKyBjb3VudCk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJ cmV0ID0gaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywNCisJ CQkJCSAgICBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVCwNCisJCQkJCSAgICAocG9zICsgY291bnQp ID4+IFBBR0VfQ0FDSEVfU0hJRlQpOw0KKwlpZiAocmV0IDwgMCkNCisJCWRvdXQoImludmFsaWRh dGVfaW5vZGVfcGFnZXMyX3JhbmdlIHJldHVybmVkICVkXG4iLCByZXQpOw0KKw0KKwlmbGFncyA9 IENFUEhfT1NEX0ZMQUdfT1JERVJTTkFQIHwNCisJCUNFUEhfT1NEX0ZMQUdfT05ESVNLIHwNCisJ CUNFUEhfT1NEX0ZMQUdfV1JJVEUgfA0KKwkJQ0VQSF9PU0RfRkxBR19BQ0s7DQorDQorCWlvdl9j bG9uZSA9IGttYWxsb2MobnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgaW92ZWMpLCBHRlBfS0VSTkVM KTsNCisJaWYgKGlvdl9jbG9uZSA9PSBOVUxMKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorCW1lbWNw eShpb3ZfY2xvbmUsIGlvdiwgbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgaW92ZWMpKTsNCisNCisJ Zm9yIChpID0gMDsgaSA8IG5yX3NlZ3MgJiYgY291bnQ7IGkrKykgew0KKwkJdm9pZCBfX3VzZXIg KmRhdGE7DQorCQlzaXplX3QgbGVmdDsNCisNCisJCWxlZnQgPSBjb3VudDsNCittb3JlOg0KKwkJ bGVuID0gbGVmdDsNCisNCisJCXNuYXBjID0gY2ktPmlfc25hcF9yZWFsbS0+Y2FjaGVkX2NvbnRl eHQ7DQorCQl2aW5vID0gY2VwaF92aW5vKGlub2RlKTsNCisJCXJlcSA9IGNlcGhfb3NkY19uZXdf cmVxdWVzdCgmZnNjLT5jbGllbnQtPm9zZGMsICZjaS0+aV9sYXlvdXQsDQorCQkJCQkgICAgdmlu bywgcG9zLCAmbGVuLCBudW1fb3BzLA0KKwkJCQkJICAgIENFUEhfT1NEX09QX1dSSVRFLCBmbGFn cywgc25hcGMsDQorCQkJCQkgICAgY2ktPmlfdHJ1bmNhdGVfc2VxLA0KKwkJCQkJICAgIGNpLT5p X3RydW5jYXRlX3NpemUsDQorCQkJCQkgICAgZmFsc2UpOw0KKwkJaWYgKElTX0VSUihyZXEpKSB7 DQorCQkJcmV0ID0gUFRSX0VSUihyZXEpOw0KKwkJCWdvdG8gb3V0Ow0KKwkJfQ0KKw0KKwkJLyoN CisJCSAqIHdyaXRlIGZyb20gYmVnaW5uaW5nIG9mIGZpcnN0IHBhZ2UsDQorCQkgKiByZWdhcmRs ZXNzIG9mIGlvIGFsaWdubWVudA0KKwkJICovDQorCQludW1fcGFnZXMgPSAobGVuICsgUEFHRV9D QUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsNCisNCiAJCXBhZ2VzID0gY2VwaF9h bGxvY19wYWdlX3ZlY3RvcihudW1fcGFnZXMsIEdGUF9OT0ZTKTsNCiAJCWlmIChJU19FUlIocGFn ZXMpKSB7DQogCQkJcmV0ID0gUFRSX0VSUihwYWdlcyk7DQogCQkJZ290byBvdXQ7DQogCQl9DQot CQlyZXQgPSBjZXBoX2NvcHlfdXNlcl90b19wYWdlX3ZlY3RvcihwYWdlcywgZGF0YSwgcG9zLCBs ZW4pOw0KKw0KKwkJaWYgKGxlbiA8PSBpb3ZfY2xvbmVbaV0uaW92X2xlbikgew0KKwkJCWRhdGEg PSBpb3ZfY2xvbmVbaV0uaW92X2Jhc2U7DQorCQkJcmV0ID0gY2VwaF9jb3B5X3VzZXJfdG9fcGFn ZV92ZWN0b3IocGFnZXMsDQorCQkJCQkJCQlkYXRhLCAwLCBsZW4pOw0KKwkJCWlmIChyZXQgPiAw KSB7DQorCQkJCWlvdl9jbG9uZVtpXS5pb3ZfYmFzZSArPSByZXQ7DQorCQkJCWlvdl9jbG9uZVtp XS5pb3ZfbGVuIC09IHJldDsNCisJCQl9DQorCQl9IGVsc2Ugew0KKwkJCWludCBqLCBsLCBrID0g MCwgY29weWVkID0gMDsNCisJCQlzaXplX3QgdG1wID0gbGVuOw0KKw0KKwkJCWZvciAoaiA9IGk7 IGogPCBucl9zZWdzICYmIHRtcDsgaisrKSB7DQorCQkJCWRhdGEgPSBpb3ZfY2xvbmVbal0uaW92 X2Jhc2U7DQorCQkJCWwgPSBpb3ZfY2xvbmVbal0uaW92X2xlbjsNCisNCisJCQkJaWYgKHRtcCA8 IGwpIHsNCisJCQkJCXJldCA9IGNlcGhfY29weV91c2VyX3RvX3BhZ2VfdmVjdG9yKCZwYWdlc1tr XSwNCisJCQkJCQkJCQkgICAgZGF0YSwNCisJCQkJCQkJCQkgICAgY29weWVkLA0KKwkJCQkJCQkJ CSAgICB0bXApOw0KKwkJCQkJaW92X2Nsb25lW2pdLmlvdl9sZW4gLT0gcmV0Ow0KKwkJCQkJaW92 X2Nsb25lW2pdLmlvdl9iYXNlICs9IHJldDsNCisJCQkJCWJyZWFrOw0KKwkJCQl9IGVsc2UgaWYg KGwpIHsNCisJCQkJCXJldCA9IGNlcGhfY29weV91c2VyX3RvX3BhZ2VfdmVjdG9yKCZwYWdlc1tr XSwNCisJCQkJCQkJCQkgICAgZGF0YSwNCisJCQkJCQkJCQkgICAgY29weWVkLA0KKwkJCQkJCQkJ CSAgICBsKTsNCisJCQkJCWlmIChyZXQgPCAwKQ0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJaW92X2Ns b25lW2pdLmlvdl9sZW4gPSAwOw0KKwkJCQkJY29weWVkICs9IHJldDsNCisJCQkJCXRtcCAtPSBy ZXQ7DQorCQkJCQlrID0gY2FsY19wYWdlc19mb3IoMCwgY29weWVkICsgMSkgLSAxOw0KKwkJCQl9 DQorCQkJfQ0KKw0KKwkJCS8qDQorCQkJICogRm9yIHRoaXMgY2FzZSxpdCB3aWxsIGNhbGwgZm9y IGFjdGlvbi5pIHdpbGwgYWRkIG9uZQ0KKwkJCSAqIEJ1dCBpb3ZfY2xvbmVbal0uaW92X2xlbiBt YXliZSBub3QgemVyby4NCisJCQkgKi8NCisJCQlpZiAobGVmdCA9PSBsZW4pDQorCQkJCWkgPSBq IC0gMTsNCisJCX0NCisNCiAJCWlmIChyZXQgPCAwKSB7DQogCQkJY2VwaF9yZWxlYXNlX3BhZ2Vf dmVjdG9yKHBhZ2VzLCBudW1fcGFnZXMpOw0KIAkJCWdvdG8gb3V0Ow0KIAkJfQ0KIA0KLQkJaWYg KChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSA9PSAwKSB7DQotCQkJLyogZ2V0IGEgc2Vjb25kIGNv bW1pdCBjYWxsYmFjayAqLw0KLQkJCXJlcS0+cl91bnNhZmVfY2FsbGJhY2sgPSBjZXBoX3N5bmNf d3JpdGVfdW5zYWZlOw0KLQkJCXJlcS0+cl9pbm9kZSA9IGlub2RlOw0KLQkJCW93bl9wYWdlcyA9 IHRydWU7DQotCQl9DQotCX0NCi0Jb3NkX3JlcV9vcF9leHRlbnRfb3NkX2RhdGFfcGFnZXMocmVx LCAwLCBwYWdlcywgbGVuLCBwYWdlX2FsaWduLA0KLQkJCQkJZmFsc2UsIG93bl9wYWdlcyk7DQor CQkvKiBnZXQgYSBzZWNvbmQgY29tbWl0IGNhbGxiYWNrICovDQorCQlyZXEtPnJfdW5zYWZlX2Nh bGxiYWNrID0gY2VwaF9zeW5jX3dyaXRlX3Vuc2FmZTsNCisJCXJlcS0+cl9pbm9kZSA9IGlub2Rl Ow0KIA0KLQkvKiBCVUdfT04odmluby5zbmFwICE9IENFUEhfTk9TTkFQKTsgKi8NCi0JY2VwaF9v c2RjX2J1aWxkX3JlcXVlc3QocmVxLCBwb3MsIHNuYXBjLCB2aW5vLnNuYXAsICZtdGltZSk7DQor CQlvc2RfcmVxX29wX2V4dGVudF9vc2RfZGF0YV9wYWdlcyhyZXEsIDAsIHBhZ2VzLCBsZW4sIDAs DQorCQkJCQkJZmFsc2UsIHRydWUpOw0KIA0KLQlyZXQgPSBjZXBoX29zZGNfc3RhcnRfcmVxdWVz dCgmZnNjLT5jbGllbnQtPm9zZGMsIHJlcSwgZmFsc2UpOw0KLQlpZiAoIXJldCkNCi0JCXJldCA9 IGNlcGhfb3NkY193YWl0X3JlcXVlc3QoJmZzYy0+Y2xpZW50LT5vc2RjLCByZXEpOw0KKwkJLyog QlVHX09OKHZpbm8uc25hcCAhPSBDRVBIX05PU05BUCk7ICovDQorCQljZXBoX29zZGNfYnVpbGRf cmVxdWVzdChyZXEsIHBvcywgc25hcGMsIHZpbm8uc25hcCwgJm10aW1lKTsNCiANCi0JaWYgKGZp bGUtPmZfZmxhZ3MgJiBPX0RJUkVDVCkNCi0JCWNlcGhfcHV0X3BhZ2VfdmVjdG9yKHBhZ2VzLCBu dW1fcGFnZXMsIGZhbHNlKTsNCi0JZWxzZSBpZiAoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykNCi0J CWNlcGhfcmVsZWFzZV9wYWdlX3ZlY3RvcihwYWdlcywgbnVtX3BhZ2VzKTsNCisJCXJldCA9IGNl cGhfb3NkY19zdGFydF9yZXF1ZXN0KCZmc2MtPmNsaWVudC0+b3NkYywgcmVxLCBmYWxzZSk7DQor CQlpZiAoIXJldCkNCisJCQlyZXQgPSBjZXBoX29zZGNfd2FpdF9yZXF1ZXN0KCZmc2MtPmNsaWVu dC0+b3NkYywgcmVxKTsNCiANCiBvdXQ6DQotCWNlcGhfb3NkY19wdXRfcmVxdWVzdChyZXEpOw0K LQlpZiAocmV0ID09IDApIHsNCi0JCXBvcyArPSBsZW47DQotCQl3cml0dGVuICs9IGxlbjsNCi0J CWxlZnQgLT0gbGVuOw0KLQkJZGF0YSArPSBsZW47DQotCQlpZiAobGVmdCkNCi0JCQlnb3RvIG1v cmU7DQotDQotCQlyZXQgPSB3cml0dGVuOw0KLQkJKnBwb3MgPSBwb3M7DQotCQlpZiAocG9zID4g aV9zaXplX3JlYWQoaW5vZGUpKQ0KLQkJCWNoZWNrX2NhcHMgPSBjZXBoX2lub2RlX3NldF9zaXpl KGlub2RlLCBwb3MpOw0KLQkJaWYgKGNoZWNrX2NhcHMpDQotCQkJY2VwaF9jaGVja19jYXBzKGNl cGhfaW5vZGUoaW5vZGUpLCBDSEVDS19DQVBTX0FVVEhPTkxZLA0KLQkJCQkJTlVMTCk7DQotCX0g ZWxzZSBpZiAocmV0ICE9IC1FT0xEU05BUEMgJiYgd3JpdHRlbiA+IDApIHsNCi0JCXJldCA9IHdy aXR0ZW47DQorCQljZXBoX29zZGNfcHV0X3JlcXVlc3QocmVxKTsNCisJCWlmIChyZXQgPT0gMCkg ew0KKwkJCXBvcyArPSBsZW47DQorCQkJd3JpdHRlbiArPSBsZW47DQorCQkJbGVmdCAtPSBsZW47 DQorCQkJY291bnQgLT0gbGVuOw0KKwkJCWlmIChsZWZ0KQ0KKwkJCQlnb3RvIG1vcmU7DQorDQor CQkJcmV0ID0gd3JpdHRlbjsNCisJCQlpZiAocG9zID4gaV9zaXplX3JlYWQoaW5vZGUpKQ0KKwkJ CQljaGVja19jYXBzID0gY2VwaF9pbm9kZV9zZXRfc2l6ZShpbm9kZSwgcG9zKTsNCisJCQkJaWYg KGNoZWNrX2NhcHMpDQorCQkJCQljZXBoX2NoZWNrX2NhcHMoY2VwaF9pbm9kZShpbm9kZSksDQor CQkJCQkJCUNIRUNLX0NBUFNfQVVUSE9OTFksDQorCQkJCQkJCU5VTEwpOw0KKwkJfSBlbHNlIHsN CisJCQlpZiAocmV0ICE9IC1FT0xEU05BUEMgJiYgd3JpdHRlbiA+IDApDQorCQkJCXJldCA9IHdy aXR0ZW47DQorCQkJYnJlYWs7DQorCQl9DQogCX0NCisNCisJaWYgKHJldCA+IDApDQorCQlpb2Ni LT5raV9wb3MgPSBwb3M7DQorCWtmcmVlKGlvdl9jbG9uZSk7DQogCXJldHVybiByZXQ7DQogfQ0K IA0KQEAgLTg0MywxMSArMTAwOSwxMyBAQCByZXRyeV9zbmFwOg0KIAkgICAgIGlub2RlLCBjZXBo X3Zpbm9wKGlub2RlKSwgcG9zLCBjb3VudCwgY2VwaF9jYXBfc3RyaW5nKGdvdCkpOw0KIA0KIAlp ZiAoKGdvdCAmIChDRVBIX0NBUF9GSUxFX0JVRkZFUnxDRVBIX0NBUF9GSUxFX0xBWllJTykpID09 IDAgfHwNCi0JICAgIChpb2NiLT5raV9maWxwLT5mX2ZsYWdzICYgT19ESVJFQ1QpIHx8DQotCSAg ICAoZmktPmZsYWdzICYgQ0VQSF9GX1NZTkMpKSB7DQorCSAgICAoZmlsZS0+Zl9mbGFncyAmIE9f RElSRUNUKSB8fCAoZmktPmZsYWdzICYgQ0VQSF9GX1NZTkMpKSB7DQogCQltdXRleF91bmxvY2so Jmlub2RlLT5pX211dGV4KTsNCi0JCXdyaXR0ZW4gPSBjZXBoX3N5bmNfd3JpdGUoZmlsZSwgaW92 LT5pb3ZfYmFzZSwgY291bnQsDQotCQkJCQkgIHBvcywgJmlvY2ItPmtpX3Bvcyk7DQorCQlpZiAo ZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKQ0KKwkJCXdyaXR0ZW4gPSBjZXBoX3N5bmNfZGlyZWN0 X3dyaXRlKGlvY2IsIGlvdiwNCisJCQkJCQkJIG5yX3NlZ3MsIGNvdW50KTsNCisJCWVsc2UNCisJ CQl3cml0dGVuID0gY2VwaF9zeW5jX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgY291bnQpOw0K IAkJaWYgKHdyaXR0ZW4gPT0gLUVPTERTTkFQQykgew0KIAkJCWRvdXQoImFpb193cml0ZSAlcCAl bGx4LiVsbHggJWxsdX4ldSINCiAJCQkJImdvdCBFT0xEU05BUEMsIHJldHJ5aW5nXG4iLA0KLS0g DQoxLjguMS4yDQo=