From mboxrd@z Thu Jan 1 00:00:00 1970 From: majianpeng Subject: Re: Re: [PATCH V2 1/2] ceph: Implement readv/preadv for sync operation. Date: Mon, 9 Sep 2013 10:09:10 +0800 Message-ID: <201309091009084849062@gmail.com> References: <201309061648229668212@gmail.com>, <522A783B.3070306@intel.com> Reply-To: majianpeng Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: base64 Cc: sage , ceph-devel , linux-fsdevel To: =?iso-8859-1?B?WWFuLCBaaGVuZw==?= Return-path: Sender: ceph-devel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org Pk9uIDA5LzA2LzIwMTMgMDQ6NDggUE0sIG1hamlhbnBlbmcgd3JvdGU6DQo+PiBGb3IgcmVhZHYv cHJlYWR2IHN5bmMtb3BlcmF0b2luLCBjZXBoIG9ubHkgZG8gdGhlIGZpcnN0IGlvdi4NCj4+IEl0 IGRvbid0IHRoaW5rIG90aGVyIGlvdnMuTm93IGltcGxlbWVudCB0aGlzLg0KPj4gDQo+PiBWMjoN Cj4+ICAgLWFkZCBnZW5lcmljX3NlZ21lbnRfY2hlY2tzDQo+PiAgIC11c2luZyBzdHJ1Y3QgaW92 X2l0ZXIgcmVwbGFjZSBjbG9uaW5nIHRoZSBpb3ZzLg0KPj4gICAtcmV0dXJuIHByZXZpb3VzIHN1 Y2Nlc3NmdWxseSBjb3BpZWQgaWYgY2VwaF9jb3B5X3BhZ2VfdmVjdG9yX3RvX3VzZXINCj4+ICAg IG1ldCBlcnJvci4NCj4+IA0KPj4gU2lnbmVkLW9mZi1ieTogSmlhbnBlbmcgTWEgPG1hamlhbnBl bmdAZ21haWwuY29tPg0KPj4gLS0tDQo+PiAgZnMvY2VwaC9maWxlLmMgfCAxNzQgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tDQo+PiAgMSBm aWxlIGNoYW5nZWQsIDEyMyBpbnNlcnRpb25zKCspLCA1MSBkZWxldGlvbnMoLSkNCj4+IA0KPj4g ZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZmlsZS5jIGIvZnMvY2VwaC9maWxlLmMNCj4+IGluZGV4IDNk ZTg5ODIuLjFjMjhjNTIgMTAwNjQ0DQo+PiAtLS0gYS9mcy9jZXBoL2ZpbGUuYw0KPj4gKysrIGIv ZnMvY2VwaC9maWxlLmMNCj4+IEBAIC00MDgsNTEgKzQwOCwxMDkgQEAgbW9yZToNCj4+ICAgKg0K Pj4gICAqIElmIHRoZSByZWFkIHNwYW5zIG9iamVjdCBib3VuZGFyeSwganVzdCBkbyBtdWx0aXBs ZSByZWFkcy4NCj4+ICAgKi8NCj4+IC1zdGF0aWMgc3NpemVfdCBjZXBoX3N5bmNfcmVhZChzdHJ1 Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsDQo+PiAtCQkJICAgICAgdW5zaWduZWQg bGVuLCBsb2ZmX3QgKnBvZmYsIGludCAqY2hlY2tlb2YpDQo+PiArc3RhdGljIHNzaXplX3QgY2Vw aF9zeW5jX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmksDQo+PiAr CQkJCWludCAqY2hlY2tlb2YpDQo+PiAgew0KPj4gKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2It PmtpX2ZpbHA7DQo+PiAgCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOw0K Pj4gIAlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOw0KPj4gLQl1NjQgb2ZmID0gKnBvZmY7DQo+PiAtCWlu dCBudW1fcGFnZXMsIHJldDsNCj4+ICsJdTY0IG9mZiA9IGlvY2ItPmtpX3BvczsNCj4+ICsJaW50 IG51bV9wYWdlcywgcmV0LCBuOw0KPj4gIA0KPj4gLQlkb3V0KCJzeW5jX3JlYWQgb24gZmlsZSAl cCAlbGx1fiV1ICVzXG4iLCBmaWxlLCBvZmYsIGxlbiwNCj4+ICsJZG91dCgic3luY19yZWFkIG9u IGZpbGUgJXAgJWxsdX4ldSAlc1xuIiwgZmlsZSwgb2ZmLA0KPj4gKwkgICAgICh1bnNpZ25lZClp b2NiLT5raV9sZWZ0LA0KPj4gIAkgICAgIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpID8gIk9f RElSRUNUIiA6ICIiKTsNCj4+IC0NCj4+IC0JaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0RJUkVDVCkg ew0KPj4gLQkJbnVtX3BhZ2VzID0gY2FsY19wYWdlc19mb3IoKHVuc2lnbmVkIGxvbmcpZGF0YSwg bGVuKTsNCj4+IC0JCXBhZ2VzID0gY2VwaF9nZXRfZGlyZWN0X3BhZ2VfdmVjdG9yKGRhdGEsIG51 bV9wYWdlcywgdHJ1ZSk7DQo+PiAtCX0gZWxzZSB7DQo+PiAtCQludW1fcGFnZXMgPSBjYWxjX3Bh Z2VzX2ZvcihvZmYsIGxlbik7DQo+PiAtCQlwYWdlcyA9IGNlcGhfYWxsb2NfcGFnZV92ZWN0b3Io bnVtX3BhZ2VzLCBHRlBfTk9GUyk7DQo+PiAtCX0NCj4+IC0JaWYgKElTX0VSUihwYWdlcykpDQo+ PiAtCQlyZXR1cm4gUFRSX0VSUihwYWdlcyk7DQo+PiAtDQo+PiAgCS8qDQo+PiAgCSAqIGZsdXNo IGFueSBwYWdlIGNhY2hlIHBhZ2VzIGluIHRoaXMgcmFuZ2UuICB0aGlzDQo+PiAgCSAqIHdpbGwg bWFrZSBjb25jdXJyZW50IG5vcm1hbCBhbmQgc3luYyBpbyBzbG93LA0KPj4gIAkgKiBidXQgaXQg d2lsbCBhdCBsZWFzdCBiZWhhdmUgc2Vuc2libHkgd2hlbiB0aGV5IGFyZQ0KPj4gIAkgKiBpbiBz ZXF1ZW5jZS4NCj4+ICAJICovDQo+PiAtCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5v ZGUtPmlfbWFwcGluZyk7DQo+PiArCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2Uo aW5vZGUtPmlfbWFwcGluZywgb2ZmLA0KPj4gKwkJCQkJCW9mZiArIGlvY2ItPmtpX2xlZnQpOw0K Pj4gIAlpZiAocmV0IDwgMCkNCj4+IC0JCWdvdG8gZG9uZTsNCj4+ICsJCXJldHVybiByZXQ7DQo+ PiAgDQo+PiAtCXJldCA9IHN0cmlwZWRfcmVhZChpbm9kZSwgb2ZmLCBsZW4sIHBhZ2VzLCBudW1f cGFnZXMsIGNoZWNrZW9mLA0KPj4gLQkJCSAgIGZpbGUtPmZfZmxhZ3MgJiBPX0RJUkVDVCwNCj4+ IC0JCQkgICAodW5zaWduZWQgbG9uZylkYXRhICYgflBBR0VfTUFTSyk7DQo+PiArCWlmIChmaWxl LT5mX2ZsYWdzICYgT19ESVJFQ1QpIHsNCj4+ICsJCWZvciAobiA9IDA7IG4gPCBpLT5ucl9zZWdz OyBuKyspIHsNCj4+ICsJCQl2b2lkIF9fdXNlciAqZGF0YSA9IGktPmlvdltuXS5pb3ZfYmFzZTsN Cj4+ICsJCQlzaXplX3QgbGVuID0gaS0+aW92W25dLmlvdl9sZW47DQo+PiArDQo+PiArCQkJaWYg KG4gPT0gMCkgew0KPj4gKwkJCQlsZW4gLT0gIGktPmlvdl9vZmZzZXQ7DQo+PiArCQkJCWRhdGEg Kz0gaS0+aW92X29mZnNldDsNCj4+ICsJCQl9DQo+PiArDQo+PiArCQkJbnVtX3BhZ2VzID0gY2Fs Y19wYWdlc19mb3IoKHVuc2lnbmVkIGxvbmcpZGF0YSwgbGVuKTsNCj4+ICsJCQlwYWdlcyA9IGNl cGhfZ2V0X2RpcmVjdF9wYWdlX3ZlY3RvcihkYXRhLA0KPj4gKwkJCQkJCQkgICAgbnVtX3BhZ2Vz LCB0cnVlKTsNCj4+ICsJCQlpZiAoSVNfRVJSKHBhZ2VzKSkNCj4+ICsJCQkJcmV0dXJuIFBUUl9F UlIocGFnZXMpOw0KPj4gKw0KPj4gKwkJCXJldCA9IHN0cmlwZWRfcmVhZChpbm9kZSwgb2ZmLCBs ZW4sDQo+PiArCQkJCQkgICBwYWdlcywgbnVtX3BhZ2VzLCBjaGVja2VvZiwNCj4+ICsJCQkJCSAg IDEsICh1bnNpZ25lZCBsb25nKWRhdGEgJiB+UEFHRV9NQVNLKTsNCj4+ICsJCQljZXBoX3B1dF9w YWdlX3ZlY3RvcihwYWdlcywgbnVtX3BhZ2VzLCB0cnVlKTsNCj4+ICsNCj4+ICsJCQlpZiAocmV0 IDw9IDApDQo+PiArCQkJCWJyZWFrOw0KPj4gKwkJCW9mZiArPSByZXQ7DQo+PiArCQkJaWYgKHJl dCA8IGxlbikNCj4+ICsJCQkJYnJlYWs7DQo+PiArCQl9DQo+PiAgDQo+PiAtCWlmIChyZXQgPj0g MCAmJiAoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSA9PSAwKQ0KPj4gLQkJcmV0ID0gY2VwaF9j b3B5X3BhZ2VfdmVjdG9yX3RvX3VzZXIocGFnZXMsIGRhdGEsIG9mZiwgcmV0KTsNCj4+IC0JaWYg KHJldCA+PSAwKQ0KPj4gLQkJKnBvZmYgPSBvZmYgKyByZXQ7DQo+PiArCQlpZiAob2ZmID4gaW9j Yi0+a2lfcG9zKSB7DQo+PiArCQkJcmV0ID0gb2ZmIC0gaW9jYi0+a2lfcG9zOw0KPj4gKwkJCWlv Y2ItPmtpX3BvcyA9IG9mZjsNCj4+ICsJCQlpb2NiLT5raV9sZWZ0IC09IHJldDsNCj4+ICsJCX0N Cj4+ICsJfSBlbHNlIHsNCj4+ICsJCXNpemVfdCBsZW4gPSBpb2NiLT5raV9sZWZ0Ow0KPj4gIA0K Pj4gLWRvbmU6DQo+PiAtCWlmIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpDQo+PiAtCQljZXBo X3B1dF9wYWdlX3ZlY3RvcihwYWdlcywgbnVtX3BhZ2VzLCB0cnVlKTsNCj4+IC0JZWxzZQ0KPj4g KwkJbnVtX3BhZ2VzID0gY2FsY19wYWdlc19mb3Iob2ZmLCBsZW4pOw0KPj4gKwkJcGFnZXMgPSBj ZXBoX2FsbG9jX3BhZ2VfdmVjdG9yKG51bV9wYWdlcywgR0ZQX05PRlMpOw0KPj4gKwkJaWYgKElT X0VSUihwYWdlcykpDQo+PiArCQkJcmV0dXJuIFBUUl9FUlIocGFnZXMpOw0KPj4gKwkJcmV0ID0g c3RyaXBlZF9yZWFkKGlub2RlLCBvZmYsIGxlbiwgcGFnZXMsDQo+PiArCQkJCQludW1fcGFnZXMs IGNoZWNrZW9mLCAwLCAwKTsNCj4+ICsJCWxlbiA9IHJldDsNCj4+ICsJCWlmIChsZW4pIHsNCj4+ ICsJCQlpbnQgbCwgayA9IDA7DQo+PiArCQkJc2l6ZV90IGxlZnQgPSBsZW47DQo+PiArDQo+PiAr CQkJZm9yIChuID0gMDsgbiA8IGktPm5yX3NlZ3MgJiYgbGVmdDsgbisrKSB7DQo+PiArCQkJCXZv aWQgX191c2VyICpkYXRhID0gaS0+aW92W25dLmlvdl9iYXNlOw0KPj4gKwkJCQlsID0gbWluKGxl ZnQsIGktPmlvdltuXS5pb3ZfbGVuKTsNCj4+ICsNCj4+ICsJCQkJaWYgKG4gPT0gMCkgew0KPj4g KwkJCQkJZGF0YSArPSBpLT5pb3Zfb2Zmc2V0Ow0KPj4gKwkJCQkJbCA9IG1pbihpLT5pb3ZbMF0u aW92X2xlbiAtIGktPmlvdl9vZmZzZXQsDQo+PiArCQkJCQkJbGVmdCk7DQo+PiArCQkJCX0NCj4+ ICsNCj4+ICsJCQkJcmV0ID0gY2VwaF9jb3B5X3BhZ2VfdmVjdG9yX3RvX3VzZXIoJnBhZ2VzW2td LA0KPj4gKwkJCQkJCQkJICAgIGRhdGEsIG9mZiwNCj4+ICsJCQkJCQkJCSAgICBsKTsNCj4+ICsJ CQkJaWYgKHJldCA+IDApIHsNCj4+ICsJCQkJCWxlZnQgLT0gcmV0Ow0KPj4gKwkJCQkJb2ZmICs9 IHJldDsNCj4+ICsJCQkJCWsgPSBjYWxjX3BhZ2VzX2Zvcihpb2NiLT5raV9wb3MsDQo+PiArCQkJ CQkJCSAgIGxlbiAtIGxlZnQgKyAxKSAtIDE7DQo+PiArCQkJCQlCVUdfT04oayA+PSBudW1fcGFn ZXMgJiYgbGVmdCk7DQo+PiArCQkJCX0gZWxzZQ0KPj4gKwkJCQkJYnJlYWs7DQo+PiArCQkJfQ0K Pg0KPkkgdGhpbmsgaXQncyBiZXR0ZXIgdG8gY2FsbCBpb3ZfaXRlcl9hZHZhbmNlKCkgaGVyZSBp bnN0ZWFkIG9mIGluIGNlcGhfYWlvX3JlYWQoKSwNCj5hbmQgY2hhbmdlIHRoZSBjb2RlIHRvIHNv bWV0aGluZyBsaWtlOg0KPi0tLS0NCj53aGlsZSAoaW92X2l0ZXJfY291bnQoJmkpICYmIGxlZnQg PiAwKSB7DQo+ICAgdm9pZCBfX3VzZXIgKmRhdGEgPSBpLT5pb3YtPmlvdl9iYXNlICsgaS0+aW92 X29mZnNldDsNCj4gICBsID0gbWluKGxlZnQsIGktPmlvdi0+aW92X2xlbiAtIGktPmlvdl9vZmZz ZXQpOw0KPg0KPiAgIHJldCA9IGNlcGhfY29weV9wYWdlX3ZlY3Rvcl90b191c2VyKCZwYWdlc1tr XSwgZGF0YSwgb2ZmLCBsKTsNCj4gICBpZiAocmV0ID4gMCkgew0KPiAgICAgaW92X2l0ZXJfYWR2 YW5jZSgmaSwgcmV0KTsNCj4gICAgIGxlZnQgLT0gcmV0Ow0KPiAgICAgb2ZmICs9IHJldDsNCj4g ICAgIGsgPSBjYWxjX3BhZ2VzX2Zvcihpb2NiLT5raV9wb3MsIGxlbiAtIGxlZnQgKyAxKSAtIDE7 DQo+ICAgICBCVUdfT04oayA+PSBudW1fcGFnZXMgJiYgbGVmdCk7DQo+ICAgfSBlbHNlDQo+ICAg ICBicmVhazsNCj59DQo+DQo+DQo+cmVzdCBjaGFuZ2UgbG9va3MgZ29vZC4NCj4NCj5SZWdhcmRz DQo+WWFuLCBaaGVuZw0KPg0KVGhhbmtzIQ0KSmlhbnBlbmcgTWENCg0KDQpTdWJqZWN0OmNlcGg6 IEltcGxlbWVudCByZWFkdi9wcmVhZHYgZm9yIHN5bmMgb3BlcmF0aW9uLg0KDQpGb3IgcmVhZHYv cHJlYWR2IHN5bmMtb3BlcmF0b2luLCBjZXBoIG9ubHkgZG8gdGhlIGZpcnN0IGlvdi4NCkl0IGRv bid0IHRoaW5rIG90aGVyIGlvdnMuTm93IGltcGxlbWVudCB0aGlzLg0KDQpWMjoNCiAgLWFkZCBn ZW5lcmljX3NlZ21lbnRfY2hlY2tzDQogIC11c2luZyBzdHJ1Y3QgaW92X2l0ZXIgcmVwbGFjZSBj bG9uaW5nIHRoZSBpb3ZzLg0KICAtcmV0dXJuIHByZXZpb3VzIHN1Y2Nlc3NmdWxseSBjb3BpZWQg aWYgY2VwaF9jb3B5X3BhZ2VfdmVjdG9yX3RvX3VzZXINCiAgIG1ldCBlcnJvci4NCg0KU2lnbmVk LW9mZi1ieTogSmlhbnBlbmcgTWEgPG1hamlhbnBlbmdAZ21haWwuY29tPg0KLS0tDQogZnMvY2Vw aC9maWxlLmMgfCAxNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tDQogMSBmaWxlIGNoYW5nZWQsIDEyMCBpbnNlcnRpb25zKCspLCA1MSBk ZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZmlsZS5jIGIvZnMvY2VwaC9maWxl LmMNCmluZGV4IDNkZTg5ODIuLjc4MDE4YzkgMTAwNjQ0DQotLS0gYS9mcy9jZXBoL2ZpbGUuYw0K KysrIGIvZnMvY2VwaC9maWxlLmMNCkBAIC00MDgsNTEgKzQwOCwxMDYgQEAgbW9yZToNCiAgKg0K ICAqIElmIHRoZSByZWFkIHNwYW5zIG9iamVjdCBib3VuZGFyeSwganVzdCBkbyBtdWx0aXBsZSBy ZWFkcy4NCiAgKi8NCi1zdGF0aWMgc3NpemVfdCBjZXBoX3N5bmNfcmVhZChzdHJ1Y3QgZmlsZSAq ZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsDQotCQkJICAgICAgdW5zaWduZWQgbGVuLCBsb2ZmX3Qg KnBvZmYsIGludCAqY2hlY2tlb2YpDQorc3RhdGljIHNzaXplX3QgY2VwaF9zeW5jX3JlYWQoc3Ry dWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmksDQorCQkJCWludCAqY2hlY2tlb2Yp DQogew0KKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7DQogCXN0cnVjdCBpbm9k ZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOw0KIAlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOw0KLQl1 NjQgb2ZmID0gKnBvZmY7DQotCWludCBudW1fcGFnZXMsIHJldDsNCisJdTY0IG9mZiA9IGlvY2It PmtpX3BvczsNCisJaW50IG51bV9wYWdlcywgcmV0LCBuOw0KIA0KLQlkb3V0KCJzeW5jX3JlYWQg b24gZmlsZSAlcCAlbGx1fiV1ICVzXG4iLCBmaWxlLCBvZmYsIGxlbiwNCisJZG91dCgic3luY19y ZWFkIG9uIGZpbGUgJXAgJWxsdX4ldSAlc1xuIiwgZmlsZSwgb2ZmLA0KKwkgICAgICh1bnNpZ25l ZClpb2NiLT5raV9sZWZ0LA0KIAkgICAgIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpID8gIk9f RElSRUNUIiA6ICIiKTsNCi0NCi0JaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0RJUkVDVCkgew0KLQkJ bnVtX3BhZ2VzID0gY2FsY19wYWdlc19mb3IoKHVuc2lnbmVkIGxvbmcpZGF0YSwgbGVuKTsNCi0J CXBhZ2VzID0gY2VwaF9nZXRfZGlyZWN0X3BhZ2VfdmVjdG9yKGRhdGEsIG51bV9wYWdlcywgdHJ1 ZSk7DQotCX0gZWxzZSB7DQotCQludW1fcGFnZXMgPSBjYWxjX3BhZ2VzX2ZvcihvZmYsIGxlbik7 DQotCQlwYWdlcyA9IGNlcGhfYWxsb2NfcGFnZV92ZWN0b3IobnVtX3BhZ2VzLCBHRlBfTk9GUyk7 DQotCX0NCi0JaWYgKElTX0VSUihwYWdlcykpDQotCQlyZXR1cm4gUFRSX0VSUihwYWdlcyk7DQot DQogCS8qDQogCSAqIGZsdXNoIGFueSBwYWdlIGNhY2hlIHBhZ2VzIGluIHRoaXMgcmFuZ2UuICB0 aGlzDQogCSAqIHdpbGwgbWFrZSBjb25jdXJyZW50IG5vcm1hbCBhbmQgc3luYyBpbyBzbG93LA0K IAkgKiBidXQgaXQgd2lsbCBhdCBsZWFzdCBiZWhhdmUgc2Vuc2libHkgd2hlbiB0aGV5IGFyZQ0K IAkgKiBpbiBzZXF1ZW5jZS4NCiAJICovDQotCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQo aW5vZGUtPmlfbWFwcGluZyk7DQorCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2Uo aW5vZGUtPmlfbWFwcGluZywgb2ZmLA0KKwkJCQkJCW9mZiArIGlvY2ItPmtpX2xlZnQpOw0KIAlp ZiAocmV0IDwgMCkNCi0JCWdvdG8gZG9uZTsNCisJCXJldHVybiByZXQ7DQogDQotCXJldCA9IHN0 cmlwZWRfcmVhZChpbm9kZSwgb2ZmLCBsZW4sIHBhZ2VzLCBudW1fcGFnZXMsIGNoZWNrZW9mLA0K LQkJCSAgIGZpbGUtPmZfZmxhZ3MgJiBPX0RJUkVDVCwNCi0JCQkgICAodW5zaWduZWQgbG9uZylk YXRhICYgflBBR0VfTUFTSyk7DQorCWlmIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpIHsNCisJ CWZvciAobiA9IDA7IG4gPCBpLT5ucl9zZWdzOyBuKyspIHsNCisJCQl2b2lkIF9fdXNlciAqZGF0 YSA9IGktPmlvdltuXS5pb3ZfYmFzZTsNCisJCQlzaXplX3QgbGVuID0gaS0+aW92W25dLmlvdl9s ZW47DQorDQorCQkJaWYgKG4gPT0gMCkgew0KKwkJCQlsZW4gLT0gIGktPmlvdl9vZmZzZXQ7DQor CQkJCWRhdGEgKz0gaS0+aW92X29mZnNldDsNCisJCQl9DQorDQorCQkJbnVtX3BhZ2VzID0gY2Fs Y19wYWdlc19mb3IoKHVuc2lnbmVkIGxvbmcpZGF0YSwgbGVuKTsNCisJCQlwYWdlcyA9IGNlcGhf Z2V0X2RpcmVjdF9wYWdlX3ZlY3RvcihkYXRhLA0KKwkJCQkJCQkgICAgbnVtX3BhZ2VzLCB0cnVl KTsNCisJCQlpZiAoSVNfRVJSKHBhZ2VzKSkNCisJCQkJcmV0dXJuIFBUUl9FUlIocGFnZXMpOw0K Kw0KKwkJCXJldCA9IHN0cmlwZWRfcmVhZChpbm9kZSwgb2ZmLCBsZW4sDQorCQkJCQkgICBwYWdl cywgbnVtX3BhZ2VzLCBjaGVja2VvZiwNCisJCQkJCSAgIDEsICh1bnNpZ25lZCBsb25nKWRhdGEg JiB+UEFHRV9NQVNLKTsNCisJCQljZXBoX3B1dF9wYWdlX3ZlY3RvcihwYWdlcywgbnVtX3BhZ2Vz LCB0cnVlKTsNCisNCisJCQlpZiAocmV0IDw9IDApDQorCQkJCWJyZWFrOw0KKwkJCW9mZiArPSBy ZXQ7DQorCQkJaWYgKHJldCA8IGxlbikNCisJCQkJYnJlYWs7DQorCQl9DQogDQotCWlmIChyZXQg Pj0gMCAmJiAoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSA9PSAwKQ0KLQkJcmV0ID0gY2VwaF9j b3B5X3BhZ2VfdmVjdG9yX3RvX3VzZXIocGFnZXMsIGRhdGEsIG9mZiwgcmV0KTsNCi0JaWYgKHJl dCA+PSAwKQ0KLQkJKnBvZmYgPSBvZmYgKyByZXQ7DQorCQlpZiAob2ZmID4gaW9jYi0+a2lfcG9z KSB7DQorCQkJcmV0ID0gb2ZmIC0gaW9jYi0+a2lfcG9zOw0KKwkJCWlvY2ItPmtpX3BvcyA9IG9m ZjsNCisJCQlpb2NiLT5raV9sZWZ0IC09IHJldDsNCisJCX0NCisJfSBlbHNlIHsNCisJCXNpemVf dCBsZW4gPSBpb2NiLT5raV9sZWZ0Ow0KIA0KLWRvbmU6DQotCWlmIChmaWxlLT5mX2ZsYWdzICYg T19ESVJFQ1QpDQotCQljZXBoX3B1dF9wYWdlX3ZlY3RvcihwYWdlcywgbnVtX3BhZ2VzLCB0cnVl KTsNCi0JZWxzZQ0KKwkJbnVtX3BhZ2VzID0gY2FsY19wYWdlc19mb3Iob2ZmLCBsZW4pOw0KKwkJ cGFnZXMgPSBjZXBoX2FsbG9jX3BhZ2VfdmVjdG9yKG51bV9wYWdlcywgR0ZQX05PRlMpOw0KKwkJ aWYgKElTX0VSUihwYWdlcykpDQorCQkJcmV0dXJuIFBUUl9FUlIocGFnZXMpOw0KKwkJcmV0ID0g c3RyaXBlZF9yZWFkKGlub2RlLCBvZmYsIGxlbiwgcGFnZXMsDQorCQkJCQludW1fcGFnZXMsIGNo ZWNrZW9mLCAwLCAwKTsNCisJCWxlbiA9IHJldDsNCisJCWlmIChsZW4pIHsNCisJCQlpbnQgbCwg ayA9IDA7DQorCQkJc2l6ZV90IGxlZnQgPSBsZW47DQorDQorCQkJd2hpbGUgKGxlZnQpIHsNCisJ CQkJdm9pZCBfX3VzZXIgKmRhdGEgPSBpLT5pb3ZbMF0uaW92X2Jhc2UNCisJCQkJCQkJKyBpLT5p b3Zfb2Zmc2V0Ow0KKwkJCQlsID0gbWluKGktPmlvdlswXS5pb3ZfbGVuIC0gaS0+aW92X29mZnNl dCwNCisJCQkJCWxlbik7DQorDQorCQkJCXJldCA9IGNlcGhfY29weV9wYWdlX3ZlY3Rvcl90b191 c2VyKCZwYWdlc1trXSwNCisJCQkJCQkJCSAgICBkYXRhLCBvZmYsDQorCQkJCQkJCQkgICAgbCk7 DQorCQkJCWlmIChyZXQgPiAwKSB7DQorCQkJCQlpb3ZfaXRlcl9hZHZhbmNlKGksIHJldCk7DQor CQkJCQlsZWZ0IC09IHJldDsNCisJCQkJCW9mZiArPSByZXQ7DQorCQkJCQlrID0gY2FsY19wYWdl c19mb3IoaW9jYi0+a2lfcG9zLA0KKwkJCQkJCQkgICBsZW4gLSBsZWZ0ICsgMSkgLSAxOw0KKwkJ CQkJQlVHX09OKGsgPj0gbnVtX3BhZ2VzICYmIGxlZnQpOw0KKwkJCQl9IGVsc2UNCisJCQkJCWJy ZWFrOw0KKwkJCX0NCisNCisJCQlsZW4gLT0gbGVmdDsNCisJCQlpZiAobGVuID4gMCkgew0KKwkJ CQlpb2NiLT5raV9wb3MgKz0gbGVuOw0KKwkJCQlpb2NiLT5raV9sZWZ0IC09IGxlbjsNCisJCQkJ cmV0ID0gbGVuOw0KKwkJCX0NCisJCX0NCiAJCWNlcGhfcmVsZWFzZV9wYWdlX3ZlY3RvcihwYWdl cywgbnVtX3BhZ2VzKTsNCisJfQ0KKw0KIAlkb3V0KCJzeW5jX3JlYWQgcmVzdWx0ICVkXG4iLCBy ZXQpOw0KIAlyZXR1cm4gcmV0Ow0KIH0NCkBAIC02NDcsNTUgKzcwMiw2OSBAQCBzdGF0aWMgc3Np emVfdCBjZXBoX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVj ICppb3YsDQogew0KIAlzdHJ1Y3QgZmlsZSAqZmlscCA9IGlvY2ItPmtpX2ZpbHA7DQogCXN0cnVj dCBjZXBoX2ZpbGVfaW5mbyAqZmkgPSBmaWxwLT5wcml2YXRlX2RhdGE7DQotCWxvZmZfdCAqcHBv cyA9ICZpb2NiLT5raV9wb3M7DQotCXNpemVfdCBsZW4gPSBpb3YtPmlvdl9sZW47DQorCXNpemVf dCBsZW4gPSAwOw0KIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTsNCiAJ c3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2kgPSBjZXBoX2lub2RlKGlub2RlKTsNCi0Jdm9pZCBf X3VzZXIgKmJhc2UgPSBpb3YtPmlvdl9iYXNlOw0KIAlzc2l6ZV90IHJldDsNCiAJaW50IHdhbnQs IGdvdCA9IDA7DQogCWludCBjaGVja2VvZiA9IDAsIHJlYWQgPSAwOw0KIA0KKw0KIAlkb3V0KCJh aW9fcmVhZCAlcCAlbGx4LiVsbHggJWxsdX4ldSB0cnlpbmcgdG8gZ2V0IGNhcHMgb24gJXBcbiIs DQogCSAgICAgaW5vZGUsIGNlcGhfdmlub3AoaW5vZGUpLCBwb3MsICh1bnNpZ25lZClsZW4sIGlu b2RlKTsNCi1hZ2FpbjoNCisNCisJcmV0ID0gZ2VuZXJpY19zZWdtZW50X2NoZWNrcyhpb3YsICZu cl9zZWdzLCAmbGVuLCBWRVJJRllfV1JJVEUpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsN CisNCiAJaWYgKGZpLT5mbW9kZSAmIENFUEhfRklMRV9NT0RFX0xBWlkpDQogCQl3YW50ID0gQ0VQ SF9DQVBfRklMRV9DQUNIRSB8IENFUEhfQ0FQX0ZJTEVfTEFaWUlPOw0KIAllbHNlDQogCQl3YW50 ID0gQ0VQSF9DQVBfRklMRV9DQUNIRTsNCiAJcmV0ID0gY2VwaF9nZXRfY2FwcyhjaSwgQ0VQSF9D QVBfRklMRV9SRCwgd2FudCwgJmdvdCwgLTEpOw0KIAlpZiAocmV0IDwgMCkNCi0JCWdvdG8gb3V0 Ow0KKwkJcmV0dXJuIHJldDsNCisNCiAJZG91dCgiYWlvX3JlYWQgJXAgJWxseC4lbGx4ICVsbHV+ JXUgZ290IGNhcCByZWZzIG9uICVzXG4iLA0KIAkgICAgIGlub2RlLCBjZXBoX3Zpbm9wKGlub2Rl KSwgcG9zLCAodW5zaWduZWQpbGVuLA0KIAkgICAgIGNlcGhfY2FwX3N0cmluZyhnb3QpKTsNCiAN CiAJaWYgKChnb3QgJiAoQ0VQSF9DQVBfRklMRV9DQUNIRXxDRVBIX0NBUF9GSUxFX0xBWllJTykp ID09IDAgfHwNCiAJICAgIChpb2NiLT5raV9maWxwLT5mX2ZsYWdzICYgT19ESVJFQ1QpIHx8DQot CSAgICAoZmktPmZsYWdzICYgQ0VQSF9GX1NZTkMpKQ0KKwkgICAgKGZpLT5mbGFncyAmIENFUEhf Rl9TWU5DKSkgew0KKwkJc3RydWN0IGlvdl9pdGVyIGk7DQorDQorCQlpb2NiLT5raV9sZWZ0ID0g bGVuOw0KKwkJaW92X2l0ZXJfaW5pdCgmaSwgaW92LCBucl9zZWdzLCBsZW4sIDApOw0KK2FnYWlu Og0KIAkJLyogaG1tLCB0aGlzIGlzbid0IHJlYWxseSBhc3luYy4uLiAqLw0KLQkJcmV0ID0gY2Vw aF9zeW5jX3JlYWQoZmlscCwgYmFzZSwgbGVuLCBwcG9zLCAmY2hlY2tlb2YpOw0KLQllbHNlDQor CQlyZXQgPSBjZXBoX3N5bmNfcmVhZChpb2NiLCAmaSwgJmNoZWNrZW9mKTsNCisNCisJCWlmIChj aGVja2VvZiAmJiByZXQgPj0gMCkgew0KKwkJCWludCBzdGF0cmV0ID0gY2VwaF9kb19nZXRhdHRy KGlub2RlLA0KKwkJCQkJCSAgICAgIENFUEhfU1RBVF9DQVBfU0laRSk7DQorDQorCQkJLyogaGl0 IEVPRiBvciBob2xlPyAqLw0KKwkJCWlmIChzdGF0cmV0ID09IDAgJiYgaW9jYi0+a2lfcG9zIDwg aW5vZGUtPmlfc2l6ZSAmJg0KKwkJCQlpb2NiLT5raV9sZWZ0KSB7DQorCQkJCWRvdXQoInN5bmNf cmVhZCBoaXQgaG9sZSwgcHBvcyAlbGxkIDwgc2l6ZSAlbGxkIg0KKwkJCQkgICAgICIsIHJlYWRp bmcgbW9yZVxuIiwgaW9jYi0+a2lfcG9zLA0KKwkJCQkgICAgIGlub2RlLT5pX3NpemUpOw0KKw0K KwkJCQlyZWFkICs9IHJldDsNCisJCQkJaW92X2l0ZXJfYWR2YW5jZSgmaSwgcmV0KTsNCisJCQkJ Y2hlY2tlb2YgPSAwOw0KKwkJCQlnb3RvIGFnYWluOw0KKwkJCX0NCisJCX0NCisNCisJfSBlbHNl DQogCQlyZXQgPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoaW9jYiwgaW92LCBucl9zZWdzLCBwb3Mp Ow0KIA0KLW91dDoNCiAJZG91dCgiYWlvX3JlYWQgJXAgJWxseC4lbGx4IGRyb3BwaW5nIGNhcCBy ZWZzIG9uICVzID0gJWRcbiIsDQogCSAgICAgaW5vZGUsIGNlcGhfdmlub3AoaW5vZGUpLCBjZXBo X2NhcF9zdHJpbmcoZ290KSwgKGludClyZXQpOw0KIAljZXBoX3B1dF9jYXBfcmVmcyhjaSwgZ290 KTsNCiANCi0JaWYgKGNoZWNrZW9mICYmIHJldCA+PSAwKSB7DQotCQlpbnQgc3RhdHJldCA9IGNl cGhfZG9fZ2V0YXR0cihpbm9kZSwgQ0VQSF9TVEFUX0NBUF9TSVpFKTsNCi0NCi0JCS8qIGhpdCBF T0Ygb3IgaG9sZT8gKi8NCi0JCWlmIChzdGF0cmV0ID09IDAgJiYgKnBwb3MgPCBpbm9kZS0+aV9z aXplKSB7DQotCQkJZG91dCgiYWlvX3JlYWQgc3luY19yZWFkIGhpdCBob2xlLCBwcG9zICVsbGQg PCBzaXplICVsbGQsIHJlYWRpbmcgbW9yZVxuIiwgKnBwb3MsIGlub2RlLT5pX3NpemUpOw0KLQkJ CXJlYWQgKz0gcmV0Ow0KLQkJCWJhc2UgKz0gcmV0Ow0KLQkJCWxlbiAtPSByZXQ7DQotCQkJY2hl Y2tlb2YgPSAwOw0KLQkJCWdvdG8gYWdhaW47DQotCQl9DQotCX0NCiAJaWYgKHJldCA+PSAwKQ0K IAkJcmV0ICs9IHJlYWQ7DQogDQotLSANCjEuOC4xLjINCg==