From: "Lever, Charles" Subject: [PATCH] 2/3 - NFS iostat support Date: Wed, 31 Mar 2004 08:34:34 -0800 Sender: nfs-admin@lists.sourceforge.net Message-ID: <482A3FA0050D21419C269D13989C61130435DE32@lavender-fe.eng.netapp.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C4173E.0CC6D7F8" Cc: Return-path: Received: from sc8-sf-mx1-b.sourceforge.net ([10.3.1.11] helo=sc8-sf-mx1.sourceforge.net) by sc8-sf-list2.sourceforge.net with esmtp (Exim 4.30) id 1B8ifw-00084s-4Q for nfs@lists.sourceforge.net; Wed, 31 Mar 2004 08:34:48 -0800 Received: from mx01.netapp.com ([198.95.226.53]) by sc8-sf-mx1.sourceforge.net with esmtp (Exim 4.30) id 1B8ifv-0006Lz-VO for nfs@lists.sourceforge.net; Wed, 31 Mar 2004 08:34:47 -0800 To: "Trond Myklebust" , "Olaf Kirch" , "Steve Dickson" , "Jeremy McNicoll" , "Patrick Mochel" Errors-To: nfs-admin@lists.sourceforge.net List-Unsubscribe: , List-Id: Discussion of NFS under Linux development, interoperability, and testing. List-Post: List-Help: List-Subscribe: , List-Archive: This is a multi-part message in MIME format. ------_=_NextPart_001_01C4173E.0CC6D7F8 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable This patch makes use of the new facility provided by the previous patch to implement per-mount NFS I/O statistics. Currently these statistics are exported in files under /proc/fs/placeholder/iostat, but we still need to pick a place (probably in /sys). This patch exposes raw counters that user-level programs can use to compute byte rates, cache hit rates, and RPC latencies. - Chuck Lever -- corporate: personal: ------_=_NextPart_001_01C4173E.0CC6D7F8 Content-Type: application/octet-stream; name="07-nfs-iostat.patch" Content-Transfer-Encoding: base64 Content-Description: 07-nfs-iostat.patch Content-Disposition: attachment; filename="07-nfs-iostat.patch" ZGlmZiAtWCAuLi8uLi9kb250LWRpZmYgLU5hdXJwIDA2LXJwY19tZXRyaWNzL2ZzL25mcy9kaXIu YyAwNy1uZnMtaW9zdGF0L2ZzL25mcy9kaXIuYw0KLS0tIDA2LXJwY19tZXRyaWNzL2ZzL25mcy9k aXIuYwkyMDA0LTAzLTI5IDE1OjA5OjU5LjkwMTI0MDAwMCAtMDUwMA0KKysrIDA3LW5mcy1pb3N0 YXQvZnMvbmZzL2Rpci5jCTIwMDQtMDMtMjkgMjI6NDk6MjYuODIzMjQxMDAwIC0wNTAwDQpAQCAt NTY2LDYgKzU2Niw3IEBAIHN0YXRpYyBpbnQgbmZzX2xvb2t1cF9yZXZhbGlkYXRlKHN0cnVjdCAN CiAJcGFyZW50ID0gZGdldF9wYXJlbnQoZGVudHJ5KTsNCiAJbG9ja19rZXJuZWwoKTsNCiAJZGly ID0gcGFyZW50LT5kX2lub2RlOw0KKwlORlNfU1RBVFMoZGlyKS5yZXZhbGlkYXRlX2RlbnRyeSsr Ow0KIAlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsNCiANCiAJaWYgKG5kICYmICEobmQtPmZsYWdz ICYgTE9PS1VQX0NPTlRJTlVFKSAmJiAobmQtPmZsYWdzICYgTE9PS1VQX09QRU4pKQ0KQEAgLTcw OCw2ICs3MDksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmZzX2xvb2t1cChzdHJ1Y3QgDQog DQogCWRmcHJpbnRrKFZGUywgIk5GUzogbG9va3VwKCVzLyVzKVxuIiwNCiAJCWRlbnRyeS0+ZF9w YXJlbnQtPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5uYW1lKTsNCisJTkZTX1NUQVRTKGRp cikudmZzX2xvb2t1cCsrOw0KIA0KIAllcnJvciA9IC1FTkFNRVRPT0xPTkc7DQogCWlmIChkZW50 cnktPmRfbmFtZS5sZW4gPiBORlNfU0VSVkVSKGRpciktPm5hbWVsZW4pDQpAQCAtMTQ5OCw2ICsx NTAwLDggQEAgbmZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IA0KIAlpbnQg bW9kZSA9IGlub2RlLT5pX21vZGU7DQogCWludCByZXM7DQogDQorCU5GU19TVEFUUyhpbm9kZSku dmZzX2FjY2VzcysrOw0KKw0KIAlpZiAobWFzayA9PSAwKQ0KIAkJcmV0dXJuIDA7DQogCWlmICht YXNrICYgTUFZX1dSSVRFKSB7DQpkaWZmIC1YIC4uLy4uL2RvbnQtZGlmZiAtTmF1cnAgMDYtcnBj X21ldHJpY3MvZnMvbmZzL2RpcmVjdC5jIDA3LW5mcy1pb3N0YXQvZnMvbmZzL2RpcmVjdC5jDQot LS0gMDYtcnBjX21ldHJpY3MvZnMvbmZzL2RpcmVjdC5jCTIwMDQtMDMtMjYgMTc6NDc6MjAuNDMy MjQwMDAwIC0wNTAwDQorKysgMDctbmZzLWlvc3RhdC9mcy9uZnMvZGlyZWN0LmMJMjAwNC0wMy0y OSAxNToyMzowMS45MzIyNDQwMDAgLTA1MDANCkBAIC0yMzAsNiArMjMwLDggQEAgbmZzX2RpcmVj dF9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cg0KIAkJCWJyZWFrOw0KIAl9DQogDQorCWlm ICh0b3RfYnl0ZXMgPiAwKQ0KKwkJTkZTX1NUQVRTKGlub2RlKS5kaXJlY3RfYnl0ZXNfcmVhZCAr PSB0b3RfYnl0ZXM7DQogCXJldHVybiB0b3RfYnl0ZXM7DQogfQ0KIA0KQEAgLTM5Niw2ICszOTgs OSBAQCBuZnNfZGlyZWN0X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0DQogCQlpZiAocmVz dWx0IDwgc2l6ZSkNCiAJCQlicmVhazsNCiAJfQ0KKw0KKwlpZiAodG90X2J5dGVzID4gMCkNCisJ CU5GU19TVEFUUyhpbm9kZSkuZGlyZWN0X2J5dGVzX3dyaXR0ZW4gKz0gdG90X2J5dGVzOw0KIAly ZXR1cm4gdG90X2J5dGVzOw0KIH0NCiANCmRpZmYgLVggLi4vLi4vZG9udC1kaWZmIC1OYXVycCAw Ni1ycGNfbWV0cmljcy9mcy9uZnMvZmlsZS5jIDA3LW5mcy1pb3N0YXQvZnMvbmZzL2ZpbGUuYw0K LS0tIDA2LXJwY19tZXRyaWNzL2ZzL25mcy9maWxlLmMJMjAwNC0wMy0yNiAxNDo0NTowMC4yODIy NDAwMDAgLTA1MDANCisrKyAwNy1uZnMtaW9zdGF0L2ZzL25mcy9maWxlLmMJMjAwNC0wMy0yOSAx NToyMzowMS45MzUyNDEwMDAgLTA1MDANCkBAIC0xNDksNiArMTQ5LDggQEAgbmZzX2ZpbGVfcmVh ZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNoYXIgKg0KIAlyZXN1bHQgPSBuZnNfcmV2YWxpZGF0ZV9p bm9kZShORlNfU0VSVkVSKGlub2RlKSwgaW5vZGUpOw0KIAlpZiAoIXJlc3VsdCkNCiAJCXJlc3Vs dCA9IGdlbmVyaWNfZmlsZV9haW9fcmVhZChpb2NiLCBidWYsIGNvdW50LCBwb3MpOw0KKwlpZiAo cmVzdWx0ID4gMCkNCisJCU5GU19TVEFUUyhpbm9kZSkuc3lzX3JlYWRfYnl0ZXMgKz0gcmVzdWx0 Ow0KIAlyZXR1cm4gcmVzdWx0Ow0KIH0NCiANCmRpZmYgLVggLi4vLi4vZG9udC1kaWZmIC1OYXVy cCAwNi1ycGNfbWV0cmljcy9mcy9uZnMvaW5vZGUuYyAwNy1uZnMtaW9zdGF0L2ZzL25mcy9pbm9k ZS5jDQotLS0gMDYtcnBjX21ldHJpY3MvZnMvbmZzL2lub2RlLmMJMjAwNC0wMy0yNiAxNDoyOToz OC4wMDAwMDAwMDAgLTA1MDANCisrKyAwNy1uZnMtaW9zdGF0L2ZzL25mcy9pbm9kZS5jCTIwMDQt MDMtMjkgMTU6MjM6MDEuOTQwMjQwMDAwIC0wNTAwDQpAQCAtMTY5LDYgKzE2OSw4IEBAIG5mc19w dXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikNCiANCiAJZGVzdHJveV9uZnN2NF9zdGF0 ZShzZXJ2ZXIpOw0KIA0KKwluZnNfdW5yZWdpc3Rlcl9pb3N0YXQoc2IpOw0KKw0KIAlrZnJlZShz ZXJ2ZXItPmhvc3RuYW1lKTsNCiB9DQogDQpAQCAtMzMyLDcgKzMzNCw3IEBAIG5mc19zYl9pbml0 KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHJwY18NCiAJaWYgKHNiLT5zX21heGJ5dGVzID4gTUFY X0xGU19GSUxFU0laRSkgDQogCQlzYi0+c19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7IA0K IA0KLQkvKiBXZSdyZSBhaXJib3JuZSBTZXQgc29ja2V0IGJ1ZmZlcnNpemUgKi8NCisJLyogV2Un cmUgYWlyYm9ybmUuIFNldCBzb2NrZXQgYnVmZmVyc2l6ZSAqLw0KIAlycGNfc2V0YnVmc2l6ZShz ZXJ2ZXItPmNsaWVudCwgc2VydmVyLT53c2l6ZSArIDEwMCwgc2VydmVyLT5yc2l6ZSArIDEwMCk7 DQogCXJldHVybiAwOw0KIAkvKiBZYXJncy4gSXQgZGlkbid0IHdvcmsgb3V0LiAqLw0KQEAgLTQ3 Niw2ICs0NzgsOSBAQCBuZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzDQog CWVyciA9IG5mc19zYl9pbml0KHNiLCBhdXRoZmxhdm9yKTsNCiAJaWYgKGVyciAhPSAwKQ0KIAkJ Z290byBvdXRfbm9pbml0Ow0KKwllcnIgPSBuZnNfcmVnaXN0ZXJfaW9zdGF0KHNiKTsNCisJaWYg KGVyciAhPSAwKQ0KKwkJZ290byBvdXRfbm9pbml0Ow0KIA0KIAlpZiAoc2VydmVyLT5mbGFncyAm IE5GU19NT1VOVF9WRVIzKSB7DQogCQlpZiAoc2VydmVyLT5uYW1lbGVuID09IDAgfHwgc2VydmVy LT5uYW1lbGVuID4gTkZTM19NQVhOQU1MRU4pDQpAQCAtMTU3MSw4ICsxNTc2LDExIEBAIHN0YXRp YyBpbnQgbmZzNF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl8NCiANCiAJc2ItPnNfb3AgPSAmbmZz NF9zb3BzOw0KIAllcnIgPSBuZnNfc2JfaW5pdChzYiwgYXV0aGZsYXZvdXIpOw0KLQlpZiAoZXJy ID09IDApDQotCQlyZXR1cm4gMDsNCisJaWYgKGVyciA9PSAwKSB7DQorCQllcnIgPSBuZnNfcmVn aXN0ZXJfaW9zdGF0KHNiKTsNCisJCWlmIChlcnIgPT0gMCkNCisJCQlyZXR1cm4gMDsNCisJfQ0K IAlycGNpb2RfZG93bigpOw0KIG91dF9zaHV0ZG93bjoNCiAJcnBjX3NodXRkb3duX2NsaWVudChz ZXJ2ZXItPmNsaWVudCk7DQpAQCAtMTgxMyw2ICsxODIxLDcgQEAgc3RhdGljIGludCBfX2luaXQg aW5pdF9uZnNfZnModm9pZCkNCiANCiAjaWZkZWYgQ09ORklHX1BST0NfRlMNCiAJcnBjX3Byb2Nf cmVnaXN0ZXIoJm5mc19ycGNzdGF0KTsNCisJbmZzX3JlZ2lzdGVyX3Byb2NfaW9zdGF0KCk7DQog I2VuZGlmDQogICAgICAgICBlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZuZnNfZnNfdHlwZSk7 DQogCWlmIChlcnIpDQpAQCAtMTgyMiw2ICsxODMxLDcgQEAgc3RhdGljIGludCBfX2luaXQgaW5p dF9uZnNfZnModm9pZCkNCiAJcmV0dXJuIDA7DQogb3V0Og0KIAlycGNfcHJvY191bnJlZ2lzdGVy KCJuZnMiKTsNCisJbmZzX3VucmVnaXN0ZXJfcHJvY19pb3N0YXQoKTsNCiAJbmZzX2Rlc3Ryb3lf d3JpdGVwYWdlY2FjaGUoKTsNCiBvdXQxOg0KIAluZnNfZGVzdHJveV9yZWFkcGFnZWNhY2hlKCk7 DQpAQCAtMTg0MSw2ICsxODUxLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IGV4aXRfbmZzX2ZzKHZv aWQpDQogCW5mc19kZXN0cm95X25mc3BhZ2VjYWNoZSgpOw0KICNpZmRlZiBDT05GSUdfUFJPQ19G Uw0KIAlycGNfcHJvY191bnJlZ2lzdGVyKCJuZnMiKTsNCisJbmZzX3VucmVnaXN0ZXJfcHJvY19p b3N0YXQoKTsNCiAjZW5kaWYNCiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZuZnNfZnNfdHlwZSk7 DQogCXVucmVnaXN0ZXJfbmZzNGZzKCk7DQpkaWZmIC1YIC4uLy4uL2RvbnQtZGlmZiAtTmF1cnAg MDYtcnBjX21ldHJpY3MvZnMvbmZzL2lvc3RhdC5jIDA3LW5mcy1pb3N0YXQvZnMvbmZzL2lvc3Rh dC5jDQotLS0gMDYtcnBjX21ldHJpY3MvZnMvbmZzL2lvc3RhdC5jCTE5NjktMTItMzEgMTk6MDA6 MDAuMDAwMDAwMDAwIC0wNTAwDQorKysgMDctbmZzLWlvc3RhdC9mcy9uZnMvaW9zdGF0LmMJMjAw NC0wMy0zMCAxMzozOTowOS4yMTMyNDAwMDAgLTA1MDANCkBAIC0wLDAgKzEsMzA3IEBADQorLyoN CisgKiAgbGludXgvZnMvbmZzL2lvc3RhdC5jDQorICoNCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0 ICBDaHVjayBMZXZlciA8Y2VsQG5ldGFwcC5jb20+DQorICoNCisgKiAgTkZTIGNsaWVudCBwZXJm b3JtYW5jZSBpbnN0cnVtZW50YXRpb24uDQorICoNCisgKiAgUmVwb3J0IHBlci1tb3VudCBJL08g c3RhdGlzdGljcyB0byB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucy4NCisgKg0KKyAqIFRPRE86DQor ICogIC0gaW1wbGVtZW50IHRoaXMgaW4gc3lzZnMgcmF0aGVyIHRoYW4gcHJvY2ZzDQorICogIC0g aW1wbGVtZW50IGFwcHJvcHJpYXRlIGluc3RydW1lbnRhdGlvbiBmb3IgTkZTdjQNCisgKi8NCisN CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0K Kw0KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4NCisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+ DQorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4NCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5o Pg0KKw0KKyNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4NCisjaW5jbHVkZSA8bGludXgvbmZzX21v dW50Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+DQorI2luY2x1ZGUgPGxpbnV4 L3N1bnJwYy94cHJ0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9tZXRyaWNzLmg+DQorDQor I2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4NCisNCisjZGVmaW5lIE5GU19QUk9DX05BTUVMRU4J KDI1NlUpDQorI2RlZmluZSBORlNfUFJPQ19NT0RFCQkoU19JUlVHTyB8IFNfSVdVU1IpDQorDQor c3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19mc19uZnMgPSBOVUxMOw0KK3N0YXRp YyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZnNfbmZzX3N0YXRzID0gTlVMTDsNCisNCisv KiBzZXJpYWxpemUgaW9zdGF0IGZpbGUgcmVhZHMgd2l0aCBmaWxlIGRlbGV0aW9uICovDQorc3Rh dGljIERFQ0xBUkVfTVVURVgobmZzX2lvc3RhdF9zZW0pOw0KKw0KKy8qKg0KKyAqIG5mc19pb3N0 YXRfc2hvdyAtIGR1bXAgTkZTIGlvc3RhdHMgaW50byBhIGZpbGUgaW4gaHVtYW4gcmVhZGFibGUg Zm9ybQ0KKyAqDQorICogQHNlcTogZmlsZSB0byB1c2UNCisgKiBAdm9pZDogdW51c2VkIGFyZ3Vt ZW50DQorICoNCisgKi8NCitzdGF0aWMgaW50DQorbmZzX2lvc3RhdF9zaG93KHN0cnVjdCBzZXFf ZmlsZSAqc2VxLCB2b2lkICp2KQ0KK3sNCisJc3RydWN0IG5mc19zZXJ2ZXIgKm5mc3M7DQorCXN0 cnVjdCB0aW1ldmFsIG5vdzsNCisNCisJZG93bigmbmZzX2lvc3RhdF9zZW0pOw0KKw0KKwluZnNz ID0gc2VxLT5wcml2YXRlOw0KKwlpZiAoIW5mc3MpDQorCQlnb3RvIG91dDsNCisNCisJc2VxX3By aW50ZihzZXEsICJORlMgaW90YXRzIHZlcnNpb246IDEuMFxuIik7DQorCXNlcV9wcmludGYoc2Vx LCAiaG9zdG5hbWU6ICVzXG4iLCBuZnNzLT5ob3N0bmFtZSk7DQorDQorCWRvX2dldHRpbWVvZmRh eSgmbm93KTsNCisJc2VxX3ByaW50ZihzZXEsICJtb3VudGVkICVsdSBzZWNvbmRzIGFnb1xuIiwN CisJCQkJbm93LnR2X3NlYyAtIG5mc3MtPm1vdW50dGltZS50dl9zZWMpOw0KKw0KKwlpZiAobmZz cy0+c3RhdHMpIHsNCisJCWludCBpOw0KKwkJc3RydWN0IG5mc19pb3N0YXQgdG90YWxzOw0KKw0K KwkJbWVtc2V0KCZ0b3RhbHMsIDAsIHNpemVvZih0b3RhbHMpKTsNCisNCisJCWZvciAoaSA9IDA7 IGkgPCBOUl9DUFVTOyBpKyspIHsNCisJCQlzdHJ1Y3QgbmZzX2lvc3RhdCAqcyA9ICZuZnNzLT5z dGF0c1tpXTsNCisJCQl0b3RhbHMuYnl0ZXNfcmVhZCArPSBzLT5ieXRlc19yZWFkOw0KKwkJCXRv dGFscy5ieXRlc193cml0dGVuICs9IHMtPmJ5dGVzX3dyaXR0ZW47DQorCQkJdG90YWxzLnN5c19y ZWFkX2J5dGVzICs9IHMtPnN5c19yZWFkX2J5dGVzOw0KKwkJCXRvdGFscy5kaXJlY3RfYnl0ZXNf cmVhZCArPSBzLT5kaXJlY3RfYnl0ZXNfcmVhZDsNCisJCQl0b3RhbHMuZGlyZWN0X2J5dGVzX3dy aXR0ZW4gKz0gcy0+ZGlyZWN0X2J5dGVzX3dyaXR0ZW47DQorDQorCQkJdG90YWxzLnJldmFsaWRh dGVfaW5vZGUgKz0gcy0+cmV2YWxpZGF0ZV9pbm9kZTsNCisJCQl0b3RhbHMucmV2YWxpZGF0ZV9k ZW50cnkgKz0gcy0+cmV2YWxpZGF0ZV9kZW50cnk7DQorCQkJdG90YWxzLnZmc19sb29rdXAgKz0g cy0+dmZzX2xvb2t1cDsNCisJCQl0b3RhbHMudmZzX2FjY2VzcyArPSBzLT52ZnNfYWNjZXNzOw0K KwkJfQ0KKw0KKwkJc2VxX3ByaW50ZihzZXEsICIjICAgICAgICByZWFkKCkgYnl0ZXMgICAgICAg TkZTIFJFQUQgYnl0ZXMgIGRpcmVjdCByZWFkKCkgYnl0ZXNcbiIpOw0KKwkJc2VxX3ByaW50Zihz ZXEsDQorCQkJIiAlMjBMdSAlMjBMdSAlMjBMdVxuIiwNCisJCQkJdG90YWxzLnN5c19yZWFkX2J5 dGVzLA0KKwkJCQl0b3RhbHMuYnl0ZXNfcmVhZCwNCisJCQkJdG90YWxzLmRpcmVjdF9ieXRlc19y ZWFkKTsNCisJCXNlcV9wcmludGYoc2VxLCAiIyAgICAgICAgICAgICAgICAgICAgICAgICAgTkZT IFdSSVRFIGJ5dGVzIGRpcmVjdCB3cml0ZSgpIGJ5dGVzXG4iKTsNCisJCXNlcV9wcmludGYoc2Vx LA0KKwkJCSIgICAgICAgICAgICAgICAgICAgICAgJTIwTHUgJTIwTHVcbiIsDQorCQkJCXRvdGFs cy5ieXRlc193cml0dGVuLA0KKwkJCQl0b3RhbHMuZGlyZWN0X2J5dGVzX3dyaXR0ZW4pOw0KKwkJ c2VxX3ByaW50ZihzZXEsICIjIGlub2RlIHZhbCBkZW50cnkgdmFsICAgIGxvb2t1cHMgICBhY2Nl c3Nlc1xuIik7DQorCQlzZXFfcHJpbnRmKHNlcSwNCisJCQkiICUxMGx1ICUxMGx1ICUxMGx1ICUx MGx1XG4iLA0KKwkJCQl0b3RhbHMucmV2YWxpZGF0ZV9pbm9kZSwNCisJCQkJdG90YWxzLnJldmFs aWRhdGVfZGVudHJ5LA0KKwkJCQl0b3RhbHMudmZzX2xvb2t1cCwNCisJCQkJdG90YWxzLnZmc19h Y2Nlc3MpOw0KKwl9DQorDQorCXNlcV9wcmludGYoc2VxLCAiXG4iKTsNCisJcnBjX3ByaW50X3Rh bGx5KHNlcSwgbmZzcy0+dGFsbHkpOw0KKw0KK291dDoNCisJdXAoJm5mc19pb3N0YXRfc2VtKTsN CisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIG5mc19pb3N0YXRfd3JpdGUgLSBoYW5kbGUg d3JpdGVzIHRvIGFuIE5GUyBpb3N0YXQgZmlsZQ0KKyAqDQorICogQGZpbGU6IGZpbGUgdGhhdCB3 YXMgd3JpdHRlbiB0bw0KKyAqIEBidWZmZXI6IHVudXNlZCBhcmd1bWVudA0KKyAqIGNvdW50OiBu dW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUNCisgKiBAcHBvczogd2hlcmUgdG8gd3JpdGUNCisgKg0K KyAqIEFueSB3cml0ZSB0byBhIHN0YXQgZmlsZSB3aWxsIGNhdXNlIHVzIHRvIGNsZWFyIGFsbCBj b3VudGVycy4NCisgKi8NCitzdGF0aWMgc3NpemVfdA0KK25mc19pb3N0YXRfd3JpdGUoc3RydWN0 IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBw b3MpDQorew0KKwlzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzczsNCisNCisJZG93bigmbmZzX2lvc3Rh dF9zZW0pOw0KKwluZnNzID0gKHN0cnVjdCBuZnNfc2VydmVyICopIFBERShmaWxlLT5mX2RlbnRy eS0+ZF9pbm9kZSktPmRhdGE7DQorCW1lbXNldChuZnNzLT5zdGF0cywgMCwgTlJfQ1BVUyAqIHNp emVvZihzdHJ1Y3QgbmZzX2lvc3RhdCkpOw0KKwlycGNfY2xlYXJfdGFsbHkobmZzcy0+dGFsbHkp Ow0KKwl1cCgmbmZzX2lvc3RhdF9zZW0pOw0KKw0KKwkqcHBvcyArPSBjb3VudDsNCisJcmV0dXJu IGNvdW50Ow0KK30NCisNCisvKioNCisgKiBuZnNfaW9zdGF0X29wZW4gLSBvcGVuIGFuIE5GUyBp b3N0YXQgZmlsZQ0KKyAqDQorICogQGlub2RlOiBpbm9kZSB0byBvcGVuDQorICogQGZpbGU6IGZp bHAgdG8gb3Blbg0KKyAqDQorICovDQorc3RhdGljIGludA0KK25mc19pb3N0YXRfb3BlbihzdHJ1 Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCit7DQorCWludCByZXN1bHQ7DQor DQorCWRvd24oJm5mc19pb3N0YXRfc2VtKTsNCisJcmVzdWx0ID0gc2luZ2xlX29wZW4oZmlsZSwg bmZzX2lvc3RhdF9zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsNCisJdXAoJm5mc19pb3N0YXRfc2Vt KTsNCisNCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorLyoqDQorICogbmZzX2lvc3RhdF9yZWxl YXNlIC0gY2xvc2UgYW4gTkZTIGlvc3RhdCBmaWxlDQorICoNCisgKiBAaW5vZGU6IGlub2RlIHRv IGNsb3NlDQorICogQGZpbGU6IGZpbHAgdG8gY2xvc2UNCisgKg0KKyAqLw0KK3N0YXRpYyBpbnQN CituZnNfaW9zdGF0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZp bGUpDQorew0KKwlpbnQgcmVzdWx0Ow0KKw0KKwlkb3duKCZuZnNfaW9zdGF0X3NlbSk7DQorCXJl c3VsdCA9IHNpbmdsZV9yZWxlYXNlKGlub2RlLCBmaWxlKTsNCisJdXAoJm5mc19pb3N0YXRfc2Vt KTsNCisNCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorc3RhdGljIHN0cnVjdCBmaWxlX29wZXJh dGlvbnMgbmZzX2lvc3RhdF9mb3BzID0gew0KKwkub3duZXIgPSBUSElTX01PRFVMRSwNCisJLm9w ZW4gPSBuZnNfaW9zdGF0X29wZW4sDQorCS5yZWFkICA9IHNlcV9yZWFkLA0KKwkud3JpdGUgPSBu ZnNfaW9zdGF0X3dyaXRlLA0KKwkubGxzZWVrID0gc2VxX2xzZWVrLA0KKwkucmVsZWFzZSA9IG5m c19pb3N0YXRfcmVsZWFzZSwNCit9Ow0KKw0KKy8qKg0KKyAqIG5mc19pb3N0YXRfZmlsZV9uYW1l IC0gY3JlYXRlIGEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgTkZTIGlvc3RhdCBmaWxlDQorICoNCisg KiBAc2I6IHN1cGVyIGJsb2NrIHdpdGggd2hpY2ggdGhpcyBmaWxlIHdpbGwgYmUgYXNzb2NpYXRl ZA0KKyAqIEBuYW1lOiBjcmVhdGUgdGhlIG5hbWUgaW4gdGhpcyBidWZmZXINCisgKg0KKyAqIElu dmVudCBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgcHJvYyBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlz IHN1cGVyYmxvY2suDQorICovDQorc3RhdGljIGlubGluZSB2b2lkDQorbmZzX2lvc3RhdF9maWxl X25hbWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciAqbmFtZSkNCit7DQorCXN0cnVjdCBu ZnNfc2VydmVyICpuZnNzID0gTkZTX1NCKHNiKTsNCisJc3ByaW50ZihuYW1lLCAiJXUtJXMiLCBN SU5PUihzYi0+c19kZXYpLCBuZnNzLT5ob3N0bmFtZSk7DQorfQ0KKw0KKy8qKg0KKyAqIG5mc19y ZWdpc3Rlcl9pb3N0YXQgLSBjcmVhdGUgYSBuZXcgTkZTIGlvc3RhdCBmaWxlDQorICoNCisgKiBA c2I6IHN1cGVyIGJsb2NrIHdpdGggd2hpY2ggdGhpcyBmaWxlIHdpbGwgYmUgYXNzb2NpYXRlZA0K KyAqDQorICovDQoraW50DQorbmZzX3JlZ2lzdGVyX2lvc3RhdChzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnNiKQ0KK3sNCisJdW5zaWduZWQgaW50IHNpemU7DQorCXN0cnVjdCBuZnNfc2VydmVyICpuZnNz ID0gTkZTX1NCKHNiKTsNCisJc3RydWN0IHJwY19jbG50ICpjbG50ID0gbmZzcy0+Y2xpZW50Ow0K Kw0KKwlzaXplID0gTlJfQ1BVUyAqIHNpemVvZihzdHJ1Y3QgbmZzX2lvc3RhdCk7DQorCW5mc3Mt PnN0YXRzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFuZnNzLT5zdGF0cykN CisJCXJldHVybiAtRU5PTUVNOw0KKwltZW1zZXQobmZzcy0+c3RhdHMsIDAsIHNpemUpOw0KKw0K Kwlkb19nZXR0aW1lb2ZkYXkoJm5mc3MtPm1vdW50dGltZSk7DQorDQorCW5mc3MtPnRhbGx5ID0g cnBjX2FsbG9jX3RhbGx5KCZuZnNfcHJvZ3JhbSwNCisJCQkJICAgICAgbmZzX3Byb2dyYW0udmVy c2lvbltjbG50LT5jbF92ZXJzXSwNCisJCQkJICAgICAgY2xudC0+Y2xfeHBydCk7DQorCWlmIChu ZnNzLT50YWxseSkgew0KKwkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpuZXc7DQorCQljaGFyIG5h bWVbTkZTX1BST0NfTkFNRUxFTl07DQorDQorCQluZnNfaW9zdGF0X2ZpbGVfbmFtZShzYiwgbmFt ZSk7DQorCQlpZiAocHJvY19mc19uZnNfc3RhdHMpIHsNCisJCQluZXcgPSBjcmVhdGVfcHJvY19l bnRyeShuYW1lLCBORlNfUFJPQ19NT0RFLCBwcm9jX2ZzX25mc19zdGF0cyk7DQorCQkJaWYgKG5l dykgew0KKwkJCQluZXctPnByb2NfZm9wcyA9ICZuZnNfaW9zdGF0X2ZvcHM7DQorCQkJCW5ldy0+ ZGF0YSA9IG5mc3M7DQorCQkJCXJldHVybiAwOw0KKwkJCX0NCisJCX0NCisNCisJCXJwY19mcmVl X3RhbGx5KG5mc3MtPnRhbGx5KTsNCisJCW5mc3MtPnRhbGx5ID0gTlVMTDsNCisJCWtmcmVlKG5m c3MtPnN0YXRzKTsNCisJCW5mc3MtPnN0YXRzID0gTlVMTDsNCisJfQ0KKwlyZXR1cm4gLUVOT01F TTsNCit9DQorDQorLyoqDQorICogbmZzX3VucmVnaXN0ZXJfaW9zdGF0IC0gY3JlYXRlIGEgbmV3 IE5GUyBpb3N0YXQgZmlsZQ0KKyAqDQorICogQHNiOiBzdXBlciBibG9jayB3aXRoIHdoaWNoIHRo aXMgZmlsZSBpcyBhc3NvY2lhdGVkDQorICoNCisgKiBXZSBhc3N1bWUgdGhhdCB0aGUgTkZTIGNs aWVudCBkb2Vzbid0IGNhbGwgdGhpcyB1bnRpbCBhbGwgb3V0c3RhbmRpbmcNCisgKiBJL08gaGFz IGJlZW4gY29tcGxldGVkLiAgT3RoZXJ3aXNlLCB0aGVyZSBpcyBhIHJpc2sgdGhhdCB0aGUgUlBD IGNsaWVudA0KKyAqIHdpbGwgYWNjZXNzIGZyZWVkIG1lbW9yeS4NCisgKi8NCit2b2lkDQorbmZz X3VucmVnaXN0ZXJfaW9zdGF0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpDQorew0KKwlzdHJ1Y3Qg bmZzX3NlcnZlciAqbmZzcyA9IE5GU19TQihzYik7DQorCWNoYXIgbmFtZVtORlNfUFJPQ19OQU1F TEVOXTsNCisNCisJZG93bigmbmZzX2lvc3RhdF9zZW0pOw0KKw0KKwlpZiAobmZzcy0+c3RhdHMp IHsNCisJCWtmcmVlKG5mc3MtPnN0YXRzKTsNCisJCW5mc3MtPnN0YXRzID0gTlVMTDsNCisJfQ0K Kw0KKwlpZiAobmZzcy0+dGFsbHkpIHsNCisJCXJwY19mcmVlX3RhbGx5KG5mc3MtPnRhbGx5KTsN CisJCW5mc3MtPnRhbGx5ID0gTlVMTDsNCisJCW5mc19pb3N0YXRfZmlsZV9uYW1lKHNiLCBuYW1l KTsNCisJCWlmIChwcm9jX2ZzX25mc19zdGF0cykNCisJCQlyZW1vdmVfcHJvY19lbnRyeShuYW1l LCBwcm9jX2ZzX25mc19zdGF0cyk7DQorCX0NCisNCisJdXAoJm5mc19pb3N0YXRfc2VtKTsNCit9 DQorDQorLyoqDQorICogbmZzX3JlZ2lzdGVyX3Byb2NfaW9zdGF0IC0gY3JlYXRlIGRpcmVjdG9y aWVzIHdoZXJlIGlvc3RhdCBmaWxlcyByZXNpZGUNCisgKg0KKyAqLw0KK3ZvaWQNCituZnNfcmVn aXN0ZXJfcHJvY19pb3N0YXQodm9pZCkNCit7DQorCXByb2NfZnNfbmZzID0gcHJvY19ta2Rpcigi cGxhY2Vob2xkZXIiLCBwcm9jX3Jvb3RfZnMpOw0KKwlpZiAocHJvY19mc19uZnMpIHsNCisJCXBy b2NfZnNfbmZzLT5vd25lciA9IFRISVNfTU9EVUxFOw0KKwkJcHJvY19mc19uZnNfc3RhdHMgPSBw cm9jX21rZGlyKCJpb3N0YXQiLCBwcm9jX2ZzX25mcyk7DQorCX0NCit9DQorDQorLyoqDQorICog bmZzX3VucmVnaXN0ZXJfcHJvY19pb3N0YXQgLSBkZWxldGUgZGlyZWN0b3JpZXMgd2hlcmUgaW9z dGF0IGZpbGVzIHJlc2lkZQ0KKyAqDQorICogV2UgYXNzdW1lIHRoZSBORlMgY2xpZW50IGNhbGxz IHRoaXMgd2hlbiBhbGwgTkZTIG1vdW50IHBvaW50cyBhcmUgZ29uZS4NCisgKiBNYXliZSB3ZSBz aG91bGQgdXNlIGEgcmVmZXJlbmNlIGNvdW50IHRvIGJlIHN1cmU/DQorICovDQordm9pZA0KK25m c191bnJlZ2lzdGVyX3Byb2NfaW9zdGF0KHZvaWQpDQorew0KKwlyZW1vdmVfcHJvY19lbnRyeSgi aW9zdGF0IiwgcHJvY19mc19uZnMpOw0KKwlwcm9jX2ZzX25mc19zdGF0cyA9IE5VTEw7DQorCXJl bW92ZV9wcm9jX2VudHJ5KCJwbGFjZWhvbGRlciIsIHByb2Nfcm9vdF9mcyk7DQorCXByb2NfZnNf bmZzID0gTlVMTDsNCit9DQpkaWZmIC1YIC4uLy4uL2RvbnQtZGlmZiAtTmF1cnAgMDYtcnBjX21l dHJpY3MvZnMvbmZzL01ha2VmaWxlIDA3LW5mcy1pb3N0YXQvZnMvbmZzL01ha2VmaWxlDQotLS0g MDYtcnBjX21ldHJpY3MvZnMvbmZzL01ha2VmaWxlCTIwMDQtMDMtMTAgMjE6NTU6MjMuMDAwMDAw MDAwIC0wNTAwDQorKysgMDctbmZzLWlvc3RhdC9mcy9uZnMvTWFrZWZpbGUJMjAwNC0wMy0yOSAx NToyMzowMS45NDYyNDUwMDAgLTA1MDANCkBAIC01LDcgKzUsOCBAQA0KIG9iai0kKENPTkZJR19O RlNfRlMpICs9IG5mcy5vDQogDQogbmZzLXkgCQkJOj0gZGlyLm8gZmlsZS5vIGlub2RlLm8gbmZz Mnhkci5vIHBhZ2VsaXN0Lm8gXA0KLQkJCSAgIHByb2MubyByZWFkLm8gc3ltbGluay5vIHVubGlu ay5vIHdyaXRlLm8NCisJCQkgICBwcm9jLm8gcmVhZC5vIHN5bWxpbmsubyB1bmxpbmsubyB3cml0 ZS5vIFwNCisJCQkgICBpb3N0YXQubw0KIG5mcy0kKENPTkZJR19ST09UX05GUykJKz0gbmZzcm9v dC5vIG1vdW50X2NsbnQubyAgICAgIA0KIG5mcy0kKENPTkZJR19ORlNfVjMpCSs9IG5mczNwcm9j Lm8gbmZzM3hkci5vDQogbmZzLSQoQ09ORklHX05GU19WNCkJKz0gbmZzNHByb2MubyBuZnM0eGRy Lm8gbmZzNHN0YXRlLm8gbmZzNHJlbmV3ZC5vIFwNCmRpZmYgLVggLi4vLi4vZG9udC1kaWZmIC1O YXVycCAwNi1ycGNfbWV0cmljcy9mcy9uZnMvbmZzMnhkci5jIDA3LW5mcy1pb3N0YXQvZnMvbmZz L25mczJ4ZHIuYw0KLS0tIDA2LXJwY19tZXRyaWNzL2ZzL25mcy9uZnMyeGRyLmMJMjAwNC0wMy0y NiAxNDoyOTozOC4xOTEyNDQwMDAgLTA1MDANCisrKyAwNy1uZnMtaW9zdGF0L2ZzL25mcy9uZnMy eGRyLmMJMjAwNC0wMy0yOSAxNToyMzowMS45NTAyNDIwMDAgLTA1MDANCkBAIC02NTcsNyArNjU3 LDggQEAgbmZzX3N0YXRfdG9fZXJybm8oaW50IHN0YXQpDQogCS5wX2VuY29kZSAgID0gIChreGRy cHJvY190KSBuZnNfeGRyXyMjYXJndHlwZSwJCQlcDQogCS5wX2RlY29kZSAgID0gIChreGRycHJv Y190KSBuZnNfeGRyXyMjcmVzdHlwZSwJCQlcDQogCS5wX2J1ZnNpeiAgID0gIE1BWChORlNfIyNh cmd0eXBlIyNfc3osTkZTXyMjcmVzdHlwZSMjX3N6KSA8PCAyLAlcDQotCS5wX3RpbWVyICAgID0g IHRpbWVyCQkJCQkJXA0KKwkucF90aW1lciAgICA9ICB0aW1lciwJCQkJCQlcDQorCS5wX25hbWUg ICAgID0gICNwcm9jCQkJCQkJXA0KIAl9DQogc3RydWN0IHJwY19wcm9jaW5mbwluZnNfcHJvY2Vk dXJlc1tdID0gew0KICAgICBQUk9DKEdFVEFUVFIsCWZoYW5kbGUsCWF0dHJzdGF0LCAxKSwNCmRp ZmYgLVggLi4vLi4vZG9udC1kaWZmIC1OYXVycCAwNi1ycGNfbWV0cmljcy9mcy9uZnMvbmZzM3By b2MuYyAwNy1uZnMtaW9zdGF0L2ZzL25mcy9uZnMzcHJvYy5jDQotLS0gMDYtcnBjX21ldHJpY3Mv ZnMvbmZzL25mczNwcm9jLmMJMjAwNC0wMy0yNiAxNDoyOTozOC4yMDcyNDEwMDAgLTA1MDANCisr KyAwNy1uZnMtaW9zdGF0L2ZzL25mcy9uZnMzcHJvYy5jCTIwMDQtMDMtMjkgMTg6MDA6MzMuNzk1 MjQwMDAwIC0wNTAwDQpAQCAtMTc4LDcgKzE3OCw4IEBAIG5mczNfcHJvY19hY2Nlc3Moc3RydWN0 IGlub2RlICppbm9kZSwgc3QNCiAJCS5ycGNfcHJvYwk9ICZuZnMzX3Byb2NlZHVyZXNbTkZTM1BS T0NfQUNDRVNTXSwNCiAJCS5ycGNfYXJncAk9ICZhcmcsDQogCQkucnBjX3Jlc3AJPSAmcmVzLA0K LQkJLnJwY19jcmVkCT0gY3JlZA0KKwkJLnJwY19jcmVkCT0gY3JlZCwNCisJCS5ycGNfdGFscAk9 IE5GU19TRVJWRVIoaW5vZGUpLT50YWxseSwNCiAJfTsNCiAJaW50CXN0YXR1czsNCiANCkBAIC0y MzcsNiArMjM4LDcgQEAgbmZzM19wcm9jX3JlYWQoc3RydWN0IG5mc19yZWFkX2RhdGEgKnJkYQ0K IAkJLnJwY19wcm9jCT0gJm5mczNfcHJvY2VkdXJlc1tORlMzUFJPQ19SRUFEXSwNCiAJCS5ycGNf YXJncAk9ICZyZGF0YS0+YXJncywNCiAJCS5ycGNfcmVzcAk9ICZyZGF0YS0+cmVzLA0KKwkJLnJw Y190YWxwCT0gTkZTX1NFUlZFUihpbm9kZSktPnRhbGx5LA0KIAl9Ow0KIAlpbnQJCQlzdGF0dXM7 DQogDQpAQCAtMjYxLDYgKzI2Myw3IEBAIG5mczNfcHJvY193cml0ZShzdHJ1Y3QgbmZzX3dyaXRl X2RhdGEgKncNCiAJCS5ycGNfcHJvYwk9ICZuZnMzX3Byb2NlZHVyZXNbTkZTM1BST0NfV1JJVEVd LA0KIAkJLnJwY19hcmdwCT0gJndkYXRhLT5hcmdzLA0KIAkJLnJwY19yZXNwCT0gJndkYXRhLT5y ZXMsDQorCQkucnBjX3RhbHAJPSBORlNfU0VSVkVSKGlub2RlKS0+dGFsbHksDQogCX07DQogCWlu dAkJCXN0YXR1czsNCiANCkBAIC0yODQsNiArMjg3LDcgQEAgbmZzM19wcm9jX2NvbW1pdChzdHJ1 Y3QgbmZzX3dyaXRlX2RhdGEgKg0KIAkJLnJwY19wcm9jCT0gJm5mczNfcHJvY2VkdXJlc1tORlMz UFJPQ19DT01NSVRdLA0KIAkJLnJwY19hcmdwCT0gJmNkYXRhLT5hcmdzLA0KIAkJLnJwY19yZXNw CT0gJmNkYXRhLT5yZXMsDQorCQkucnBjX3RhbHAJPSBORlNfU0VSVkVSKGlub2RlKS0+dGFsbHks DQogCX07DQogCWludAkJCXN0YXR1czsNCiANCkBAIC00MDYsNiArNDEwLDcgQEAgbmZzM19wcm9j X3JlbW92ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydQ0KIAkJLnJwY19wcm9jCT0gJm5mczNfcHJv Y2VkdXJlc1tORlMzUFJPQ19SRU1PVkVdLA0KIAkJLnJwY19hcmdwCT0gJmFyZywNCiAJCS5ycGNf cmVzcAk9ICZkaXJfYXR0ciwNCisJCS5ycGNfdGFscAk9IE5GU19TRVJWRVIoZGlyKS0+dGFsbHks DQogCX07DQogCWludAkJCXN0YXR1czsNCiANCkBAIC00MzQsNiArNDM5LDcgQEAgbmZzM19wcm9j X3VubGlua19zZXR1cChzdHJ1Y3QgcnBjX21lc3NhZw0KIAltc2ctPnJwY19wcm9jID0gJm5mczNf cHJvY2VkdXJlc1tORlMzUFJPQ19SRU1PVkVdOw0KIAltc2ctPnJwY19hcmdwID0gYXJnOw0KIAlt c2ctPnJwY19yZXNwID0gcmVzOw0KKwltc2ctPnJwY190YWxwID0gTkZTX1NFUlZFUihkaXItPmRf aW5vZGUpLT50YWxseTsNCiAJcmV0dXJuIDA7DQogfQ0KIA0KQEAgLTYxNyw3ICs2MjMsOCBAQCBu ZnMzX3Byb2NfcmVhZGRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksDQogCQkucnBjX3Byb2MJPSAm bmZzM19wcm9jZWR1cmVzW05GUzNQUk9DX1JFQURESVJdLA0KIAkJLnJwY19hcmdwCT0gJmFyZywN CiAJCS5ycGNfcmVzcAk9ICZyZXMsDQotCQkucnBjX2NyZWQJPSBjcmVkDQorCQkucnBjX2NyZWQJ PSBjcmVkLA0KKwkJLnJwY190YWxwCT0gTkZTX1NFUlZFUihkaXIpLT50YWxseSwNCiAJfTsNCiAJ aW50CQkJc3RhdHVzOw0KIA0KQEAgLTczOSw2ICs3NDYsNyBAQCBuZnMzX3Byb2NfcmVhZF9zZXR1 cChzdHJ1Y3QgbmZzX3JlYWRfZGF0DQogCQkucnBjX2FyZ3AJPSAmZGF0YS0+YXJncywNCiAJCS5y cGNfcmVzcAk9ICZkYXRhLT5yZXMsDQogCQkucnBjX2NyZWQJPSBkYXRhLT5jcmVkLA0KKwkJLnJw Y190YWxwCT0gTkZTX1NFUlZFUihpbm9kZSktPnRhbGx5LA0KIAl9Ow0KIA0KIAkvKiBOLkIuIERv IHdlIG5lZWQgdG8gdGVzdD8gTmV2ZXIgY2FsbGVkIGZvciBzd2FwZmlsZSBpbm9kZSAqLw0KQEAg LTc3NCw2ICs3ODIsNyBAQCBuZnMzX3Byb2Nfd3JpdGVfc2V0dXAoc3RydWN0IG5mc193cml0ZV9k DQogCQkucnBjX2FyZ3AJPSAmZGF0YS0+YXJncywNCiAJCS5ycGNfcmVzcAk9ICZkYXRhLT5yZXMs DQogCQkucnBjX2NyZWQJPSBkYXRhLT5jcmVkLA0KKwkJLnJwY190YWxwCT0gTkZTX1NFUlZFUihp bm9kZSktPnRhbGx5LA0KIAl9Ow0KIA0KIAlpZiAoaG93ICYgRkxVU0hfU1RBQkxFKSB7DQpAQCAt ODE3LDYgKzgyNiw3IEBAIG5mczNfcHJvY19jb21taXRfc2V0dXAoc3RydWN0IG5mc193cml0ZV8N CiAJCS5ycGNfYXJncAk9ICZkYXRhLT5hcmdzLA0KIAkJLnJwY19yZXNwCT0gJmRhdGEtPnJlcywN CiAJCS5ycGNfY3JlZAk9IGRhdGEtPmNyZWQsDQorCQkucnBjX3RhbHAJPSBORlNfU0VSVkVSKGlu b2RlKS0+dGFsbHksDQogCX07DQogDQogCS8qIFNldCB0aGUgaW5pdGlhbCBmbGFncyBmb3IgdGhl IHRhc2suICAqLw0KZGlmZiAtWCAuLi8uLi9kb250LWRpZmYgLU5hdXJwIDA2LXJwY19tZXRyaWNz L2ZzL25mcy9uZnMzeGRyLmMgMDctbmZzLWlvc3RhdC9mcy9uZnMvbmZzM3hkci5jDQotLS0gMDYt cnBjX21ldHJpY3MvZnMvbmZzL25mczN4ZHIuYwkyMDA0LTAzLTI2IDE0OjI5OjM4LjIyMzI0MTAw MCAtMDUwMA0KKysrIDA3LW5mcy1pb3N0YXQvZnMvbmZzL25mczN4ZHIuYwkyMDA0LTAzLTI5IDE1 OjIzOjAxLjk1OTI0MzAwMCAtMDUwMA0KQEAgLTk4Myw3ICs5ODMsOCBAQCBuZnMzX3hkcl9jb21t aXRyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsDQogCS5wX2VuY29kZSAgICA9IChreGRycHJvY190 KSBuZnMzX3hkcl8jI2FyZ3R5cGUsCQkJXA0KIAkucF9kZWNvZGUgICAgPSAoa3hkcnByb2NfdCkg bmZzM194ZHJfIyNyZXN0eXBlLAkJCVwNCiAJLnBfYnVmc2l6ICAgID0gTUFYKE5GUzNfIyNhcmd0 eXBlIyNfc3osTkZTM18jI3Jlc3R5cGUjI19zeikgPDwgMiwJXA0KLQkucF90aW1lciAgICAgPSB0 aW1lcgkJCQkJCVwNCisJLnBfdGltZXIgICAgID0gdGltZXIsCQkJCQkJXA0KKwkucF9uYW1lICAg ICAgPSAjcHJvYwkJCQkJCVwNCiAJfQ0KIA0KIHN0cnVjdCBycGNfcHJvY2luZm8JbmZzM19wcm9j ZWR1cmVzW10gPSB7DQpkaWZmIC1YIC4uLy4uL2RvbnQtZGlmZiAtTmF1cnAgMDYtcnBjX21ldHJp Y3MvZnMvbmZzL3Byb2MuYyAwNy1uZnMtaW9zdGF0L2ZzL25mcy9wcm9jLmMNCi0tLSAwNi1ycGNf bWV0cmljcy9mcy9uZnMvcHJvYy5jCTIwMDQtMDMtMjYgMTQ6Mjk6MzguMzM5MjQzMDAwIC0wNTAw DQorKysgMDctbmZzLWlvc3RhdC9mcy9uZnMvcHJvYy5jCTIwMDQtMDMtMjkgMTg6MDA6NTkuNTk2 MjQwMDAwIC0wNTAwDQpAQCAtMTc3LDYgKzE3Nyw3IEBAIG5mc19wcm9jX3JlYWQoc3RydWN0IG5m c19yZWFkX2RhdGEgKnJkYXQNCiAJCS5ycGNfcHJvYwk9ICZuZnNfcHJvY2VkdXJlc1tORlNQUk9D X1JFQURdLA0KIAkJLnJwY19hcmdwCT0gJnJkYXRhLT5hcmdzLA0KIAkJLnJwY19yZXNwCT0gJnJk YXRhLT5yZXMsDQorCQkucnBjX3RhbHAJPSBORlNfU0VSVkVSKGlub2RlKS0+dGFsbHksDQogCX07 DQogCWludAkJCXN0YXR1czsNCiANCkBAIC0yMDgsNiArMjA5LDcgQEAgbmZzX3Byb2Nfd3JpdGUo c3RydWN0IG5mc193cml0ZV9kYXRhICp3ZA0KIAkJLnJwY19wcm9jCT0gJm5mc19wcm9jZWR1cmVz W05GU1BST0NfV1JJVEVdLA0KIAkJLnJwY19hcmdwCT0gJndkYXRhLT5hcmdzLA0KIAkJLnJwY19y ZXNwCT0gJndkYXRhLT5yZXMsDQorCQkucnBjX3RhbHAJPSBORlNfU0VSVkVSKGlub2RlKS0+dGFs bHksDQogCX07DQogCWludAkJCXN0YXR1czsNCiANCkBAIC0zMTEsNyArMzEzLDggQEAgbmZzX3By b2NfcmVtb3ZlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Yw0KIAkJLnJwY19wcm9jCT0gJm5mc19w cm9jZWR1cmVzW05GU1BST0NfUkVNT1ZFXSwNCiAJCS5ycGNfYXJncAk9ICZhcmcsDQogCQkucnBj X3Jlc3AJPSBOVUxMLA0KLQkJLnJwY19jcmVkCT0gTlVMTA0KKwkJLnJwY19jcmVkCT0gTlVMTCwN CisJCS5ycGNfdGFscAk9IE5GU19TRVJWRVIoZGlyKS0+dGFsbHksDQogCX07DQogCWludAkJCXN0 YXR1czsNCiANCkBAIC0zMzUsNiArMzM4LDcgQEAgbmZzX3Byb2NfdW5saW5rX3NldHVwKHN0cnVj dCBycGNfbWVzc2FnZQ0KIAlhcmctPmxlbiA9IG5hbWUtPmxlbjsNCiAJbXNnLT5ycGNfcHJvYyA9 ICZuZnNfcHJvY2VkdXJlc1tORlNQUk9DX1JFTU9WRV07DQogCW1zZy0+cnBjX2FyZ3AgPSBhcmc7 DQorCW1zZy0+cnBjX3RhbHAgPSBORlNfU0VSVkVSKGRpci0+ZF9pbm9kZSktPnRhbGx5Ow0KIAly ZXR1cm4gMDsNCiB9DQogDQpAQCAtNDY4LDcgKzQ3Miw4IEBAIG5mc19wcm9jX3JlYWRkaXIoc3Ry dWN0IGRlbnRyeSAqZGVudHJ5LCANCiAJCS5ycGNfcHJvYwk9ICZuZnNfcHJvY2VkdXJlc1tORlNQ Uk9DX1JFQURESVJdLA0KIAkJLnJwY19hcmdwCT0gJmFyZywNCiAJCS5ycGNfcmVzcAk9IE5VTEws DQotCQkucnBjX2NyZWQJPSBjcmVkDQorCQkucnBjX2NyZWQJPSBjcmVkLA0KKwkJLnJwY190YWxw CT0gTkZTX1NFUlZFUihkaXIpLT50YWxseSwNCiAJfTsNCiAJaW50CQkJc3RhdHVzOw0KIA0KQEAg LTU2OSw2ICs1NzQsNyBAQCBuZnNfcHJvY19yZWFkX3NldHVwKHN0cnVjdCBuZnNfcmVhZF9kYXRh DQogCQkucnBjX2FyZ3AJPSAmZGF0YS0+YXJncywNCiAJCS5ycGNfcmVzcAk9ICZkYXRhLT5yZXMs DQogCQkucnBjX2NyZWQJPSBkYXRhLT5jcmVkLA0KKwkJLnJwY190YWxwCT0gTkZTX1NFUlZFUihp bm9kZSktPnRhbGx5LA0KIAl9Ow0KIA0KIAkvKiBOLkIuIERvIHdlIG5lZWQgdG8gdGVzdD8gTmV2 ZXIgY2FsbGVkIGZvciBzd2FwZmlsZSBpbm9kZSAqLw0KQEAgLTYwMCw2ICs2MDYsNyBAQCBuZnNf cHJvY193cml0ZV9zZXR1cChzdHJ1Y3QgbmZzX3dyaXRlX2RhDQogCQkucnBjX2FyZ3AJPSAmZGF0 YS0+YXJncywNCiAJCS5ycGNfcmVzcAk9ICZkYXRhLT5yZXMsDQogCQkucnBjX2NyZWQJPSBkYXRh LT5jcmVkLA0KKwkJLnJwY190YWxwCT0gTkZTX1NFUlZFUihpbm9kZSktPnRhbGx5LA0KIAl9Ow0K IA0KIAkvKiBOb3RlOiBORlN2MiBpZ25vcmVzIEBzdGFibGUgYW5kIGFsd2F5cyB1c2VzIE5GU19G SUxFX1NZTkMgKi8NCmRpZmYgLVggLi4vLi4vZG9udC1kaWZmIC1OYXVycCAwNi1ycGNfbWV0cmlj cy9mcy9uZnMvcmVhZC5jIDA3LW5mcy1pb3N0YXQvZnMvbmZzL3JlYWQuYw0KLS0tIDA2LXJwY19t ZXRyaWNzL2ZzL25mcy9yZWFkLmMJMjAwNC0wMy0yNiAxNDoyOTozOC4zNTUyNDIwMDAgLTA1MDAN CisrKyAwNy1uZnMtaW9zdGF0L2ZzL25mcy9yZWFkLmMJMjAwNC0wMy0yOSAxNToyMzowMS45Njgy NDAwMDAgLTA1MDANCkBAIC0xNDksNiArMTQ5LDcgQEAgbmZzX3JlYWRwYWdlX3N5bmMoc3RydWN0 IGZpbGUgKmZpbGUsIHN0cg0KIAkJfQ0KIAkJY291bnQgLT0gcmVzdWx0Ow0KIAkJcmRhdGEuYXJn cy5wZ2Jhc2UgKz0gcmVzdWx0Ow0KKwkJTkZTX1NUQVRTKGlub2RlKS5ieXRlc19yZWFkICs9IHJl c3VsdDsNCiAJCS8qIE5vdGU6IHJlc3VsdCA9PSAwIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB3ZSdy ZSBjYWNoaW5nDQogCQkgKiBhIHdyaXRlIHRoYXQgZXh0ZW5kcyB0aGUgZmlsZSBhbmQgcHVuY2hl cyBhIGhvbGUuDQogCQkgKi8NCkBAIC00ODgsNiArNDg5LDggQEAgdm9pZCBuZnNfcmVhZHBhZ2Vf cmVzdWx0KHN0cnVjdCBycGNfdGFzaw0KIAkJfQ0KIAkJdGFzay0+dGtfc3RhdHVzID0gLUVJTzsN CiAJfQ0KKwlpZiAodGFzay0+dGtfc3RhdHVzID4gMCkNCisJCU5GU19TVEFUUyhkYXRhLT5pbm9k ZSkuYnl0ZXNfcmVhZCArPSByZXNwLT5jb3VudDsNCiAJTkZTX0ZMQUdTKGRhdGEtPmlub2RlKSB8 PSBORlNfSU5PX0lOVkFMSURfQVRJTUU7DQogCWRhdGEtPmNvbXBsZXRlKGRhdGEsIHN0YXR1cyk7 DQogfQ0KZGlmZiAtWCAuLi8uLi9kb250LWRpZmYgLU5hdXJwIDA2LXJwY19tZXRyaWNzL2ZzL25m cy93cml0ZS5jIDA3LW5mcy1pb3N0YXQvZnMvbmZzL3dyaXRlLmMNCi0tLSAwNi1ycGNfbWV0cmlj cy9mcy9uZnMvd3JpdGUuYwkyMDA0LTAzLTI2IDE0OjI5OjM4LjM3NjI0MjAwMCAtMDUwMA0KKysr IDA3LW5mcy1pb3N0YXQvZnMvbmZzL3dyaXRlLmMJMjAwNC0wMy0yOSAxNToyMzowMS45NzMyNDEw MDAgLTA1MDANCkBAIC0yMjMsNiArMjIzLDcgQEAgc3RhdGljIGludCBuZnNfd3JpdGVwYWdlX3N5 bmMoc3RydWN0IGZpbA0KIAkgICAgICAgIHdkYXRhLmFyZ3MucGdiYXNlICs9IHJlc3VsdDsNCiAJ CXdyaXR0ZW4gKz0gcmVzdWx0Ow0KIAkJY291bnQgLT0gcmVzdWx0Ow0KKwkJTkZTX1NUQVRTKGlu b2RlKS5ieXRlc193cml0dGVuICs9IHJlc3VsdDsNCiAJfSB3aGlsZSAoY291bnQpOw0KIAkvKiBV cGRhdGUgZmlsZSBsZW5ndGggKi8NCiAJbmZzX2dyb3dfZmlsZShwYWdlLCBvZmZzZXQsIHdyaXR0 ZW4pOw0KQEAgLTExOTEsNiArMTE5Miw4IEBAIHZvaWQgbmZzX3dyaXRlYmFja19kb25lKHN0cnVj dCBycGNfdGFzayANCiAJCS8qIENhbid0IGRvIGFueXRoaW5nIGFib3V0IGl0IGV4Y2VwdCB0aHJv dyBhbiBlcnJvci4gKi8NCiAJCXRhc2stPnRrX3N0YXR1cyA9IC1FSU87DQogCX0NCisJaWYgKHRh c2stPnRrX3N0YXR1cyA+IDApDQorCQlORlNfU1RBVFMoZGF0YS0+aW5vZGUpLmJ5dGVzX3dyaXR0 ZW4gKz0gcmVzcC0+Y291bnQ7DQogDQogCS8qDQogCSAqIFByb2Nlc3MgdGhlIG5mc19wYWdlIGxp c3QNCmRpZmYgLVggLi4vLi4vZG9udC1kaWZmIC1OYXVycCAwNi1ycGNfbWV0cmljcy9pbmNsdWRl L2xpbnV4L25mc19mcy5oIDA3LW5mcy1pb3N0YXQvaW5jbHVkZS9saW51eC9uZnNfZnMuaA0KLS0t IDA2LXJwY19tZXRyaWNzL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgJMjAwNC0wMy0yNiAxNDoyOToz OC40MDAyNDMwMDAgLTA1MDANCisrKyAwNy1uZnMtaW9zdGF0L2luY2x1ZGUvbGludXgvbmZzX2Zz LmgJMjAwNC0wMy0yOSAxNToyMzowMS45NzYyNDMwMDAgLTA1MDANCkBAIC0xODcsNiArMTg3LDcg QEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzX2lub2RlICpORlNfSShzdA0KIA0KICNkZWZpbmUg TkZTX0ZIKGlub2RlKQkJCSgmTkZTX0koaW5vZGUpLT5maCkNCiAjZGVmaW5lIE5GU19TRVJWRVIo aW5vZGUpCQkoTkZTX1NCKGlub2RlLT5pX3NiKSkNCisjZGVmaW5lIE5GU19TVEFUUyhpbm9kZSkJ CU5GU19TRVJWRVIoaW5vZGUpLT5zdGF0c1tzbXBfcHJvY2Vzc29yX2lkKCldDQogI2RlZmluZSBO RlNfQ0xJRU5UKGlub2RlKQkJKE5GU19TRVJWRVIoaW5vZGUpLT5jbGllbnQpDQogI2RlZmluZSBO RlNfUFJPVE8oaW5vZGUpCQkoTkZTX1NFUlZFUihpbm9kZSktPnJwY19vcHMpDQogI2RlZmluZSBO RlNfQUREUihpbm9kZSkJCQkoUlBDX1BFRVJBRERSKE5GU19DTElFTlQoaW5vZGUpKSkNCkBAIC0y NjAsNiArMjYxLDE0IEBAIHN0YXRpYyBpbmxpbmUgaW50IG5mc192ZXJpZnlfY2hhbmdlX2F0dHIN CiB9DQogDQogLyoNCisgKiBsaW51eC9mcy9uZnMvaW9zdGF0LmMNCisgKi8NCitleHRlcm4gaW50 IG5mc19yZWdpc3Rlcl9pb3N0YXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7DQorZXh0ZXJuIHZv aWQgbmZzX3VucmVnaXN0ZXJfaW9zdGF0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOw0KK2V4dGVy biB2b2lkIG5mc19yZWdpc3Rlcl9wcm9jX2lvc3RhdCh2b2lkKTsNCitleHRlcm4gdm9pZCBuZnNf dW5yZWdpc3Rlcl9wcm9jX2lvc3RhdCh2b2lkKTsNCisNCisvKg0KICAqIGxpbnV4L2ZzL25mcy9p bm9kZS5jDQogICovDQogZXh0ZXJuIHZvaWQgbmZzX3phcF9jYWNoZXMoc3RydWN0IGlub2RlICop Ow0KQEAgLTQzMCw2ICs0MzksNyBAQCBzdGF0aWMgaW5saW5lIGludCBuZnNfYXR0cmlidXRlX3Rp bWVvdXQoDQogICovDQogc3RhdGljIGlubGluZSBpbnQgbmZzX3JldmFsaWRhdGVfaW5vZGUoc3Ry dWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGlub2RlICppbm9kZSkNCiB7DQorCU5GU19T VEFUUyhpbm9kZSkucmV2YWxpZGF0ZV9pbm9kZSsrOw0KIAlpZiAoIShORlNfRkxBR1MoaW5vZGUp ICYgKE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fSU5WQUxJRF9EQVRBKSkNCiAJCQkmJiAh bmZzX2F0dHJpYnV0ZV90aW1lb3V0KGlub2RlKSkNCiAJCXJldHVybiBORlNfU1RBTEUoaW5vZGUp ID8gLUVTVEFMRSA6IDA7DQpkaWZmIC1YIC4uLy4uL2RvbnQtZGlmZiAtTmF1cnAgMDYtcnBjX21l dHJpY3MvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaCAwNy1uZnMtaW9zdGF0L2luY2x1ZGUvbGlu dXgvbmZzX2ZzX3NiLmgNCi0tLSAwNi1ycGNfbWV0cmljcy9pbmNsdWRlL2xpbnV4L25mc19mc19z Yi5oCTIwMDQtMDMtMjYgMTQ6Mjk6MzguNDEzMjQzMDAwIC0wNTAwDQorKysgMDctbmZzLWlvc3Rh dC9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCTIwMDQtMDMtMjkgMjI6NDk6NDcuODQxMjQwMDAw IC0wNTAwDQpAQCAtMyw2ICszLDE5IEBADQogDQogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4NCiAj aW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4NCisjaW5jbHVkZSA8bGludXgvc3VucnBjL21l dHJpY3MuaD4NCisNCitzdHJ1Y3QgbmZzX2lvc3RhdCB7DQorCXVuc2lnbmVkIGxvbmcgbG9uZwli eXRlc19yZWFkLA0KKwkJCQlieXRlc193cml0dGVuLA0KKwkJCQlzeXNfcmVhZF9ieXRlcywNCisJ CQkJZGlyZWN0X2J5dGVzX3JlYWQsDQorCQkJCWRpcmVjdF9ieXRlc193cml0dGVuOw0KKwl1bnNp Z25lZCBsb25nCQlyZXZhbGlkYXRlX2lub2RlLA0KKwkJCQlyZXZhbGlkYXRlX2RlbnRyeSwNCisJ CQkJdmZzX2xvb2t1cCwNCisJCQkJdmZzX2FjY2VzczsNCit9Ow0KIA0KIC8qDQogICogTkZTIGNs aWVudCBwYXJhbWV0ZXJzIHN0b3JlZCBpbiB0aGUgc3VwZXJibG9jay4NCkBAIC00NSw2ICs1OCw5 IEBAIHN0cnVjdCBuZnNfc2VydmVyIHsNCiAJCQkJCQkgICB0aGF0IGFyZSBzdXBwb3J0ZWQgb24g dGhpcw0KIAkJCQkJCSAgIGZpbGVzeXN0ZW0gKi8NCiAjZW5kaWYNCisJc3RydWN0IHRpbWV2YWwJ CW1vdW50dGltZTsNCisJc3RydWN0IG5mc19pb3N0YXQgKglzdGF0czsNCisJc3RydWN0IHJwY190 YWxseSAqCXRhbGx5Ow0KIH07DQogDQogLyogU2VydmVyIGNhcGFiaWxpdGllcyAqLw0K ------_=_NextPart_001_01C4173E.0CC6D7F8-- ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ NFS maillist - NFS@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/nfs