From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yan Zheng" Subject: [RFC][PATCH] Fix nodatacow check Date: Fri, 18 Jul 2008 10:13:55 +0800 Message-ID: <3d0408630807171913r29a1f24he69d80497cd374d7@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_10966_11760262.1216347235435" To: linux-btrfs@vger.kernel.org Return-path: List-ID: ------=_Part_10966_11760262.1216347235435 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello, This patch fixes the nodatacow check. The new test function can always detect extents referenced by multiple snatshots. If a extent was allocated in recent two transactions and no snapshot happened in these two transactions, we can always avoid cow. To check given extent's reference, the test function walks down old tree root, then check backref info in the path. This initial version takes old tree root from root->commit. A new version using the oldest tree root will be sent later. Regards YZ ------=_Part_10966_11760262.1216347235435 Content-Type: text/x-patch; name=nocow.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fis4e0c10 Content-Disposition: attachment; filename=nocow.patch ZGlmZiAtciAzZjBlZWU4MDQ5NzQgY3RyZWUuaAotLS0gYS9jdHJlZS5oCVRodSBKdW4gMjYgMTA6 MzQ6MjAgMjAwOCAtMDQwMAorKysgYi9jdHJlZS5oCUZyaSBKdWwgMTggMDM6MjI6MzQgMjAwOCAr MDgwMApAQCAtMTM0OCw5ICsxMzQ4LDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpm ZGVudHJ5KHN0cgogfQoKIC8qIGV4dGVudC10cmVlLmMgKi8KLXUzMiBidHJmc19jb3VudF9zbmFw c2hvdHNfaW5fcGF0aChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkgIHN0cnVjdCBidHJm c19wYXRoICpjb3VudF9wYXRoLAotCQkJCSAgdTY0IGV4cGVjdGVkX293bmVyLCB1NjQgZmlyc3Rf ZXh0ZW50KTsKIGludCBidHJmc19leHRlbnRfcG9zdF9vcChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFu ZGxlICp0cmFucywKIAkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7CiBpbnQgYnRyZnNfY29w eV9waW5uZWQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBleHRlbnRfaW9fdHJlZSAq Y29weSk7CkBAIC0xNDA1LDYgKzE0MDIsOCBAQCBpbnQgYnRyZnNfbWFrZV9ibG9ja19ncm91cChz dHJ1Y3QgYnRyZnNfCiAJCQkgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGJ5dGVzX3Vz ZWQsCiAJCQkgICB1NjQgdHlwZSwgdTY0IGNodW5rX29iamVjdGlkLCB1NjQgY2h1bmtfb2Zmc2V0 LAogCQkJICAgdTY0IHNpemUpOworaW50IGJ0cmZzX2hhc19jcm9zc19yZWZlcmVuY2Uoc3RydWN0 IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgICBzdHJ1Y3QgYnRyZnNfa2V5ICprZXksIHU2NCBi eXRlbnIpOwogLyogY3RyZWUuYyAqLwogaW50IGJ0cmZzX3ByZXZpb3VzX2l0ZW0oc3RydWN0IGJ0 cmZzX3Jvb3QgKnJvb3QsCiAJCQlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwgdTY0IG1pbl9vYmpl Y3RpZCwKZGlmZiAtciAzZjBlZWU4MDQ5NzQgZXh0ZW50LXRyZWUuYwotLS0gYS9leHRlbnQtdHJl ZS5jCVRodSBKdW4gMjYgMTA6MzQ6MjAgMjAwOCAtMDQwMAorKysgYi9leHRlbnQtdHJlZS5jCUZy aSBKdWwgMTggMDM6MjI6MzQgMjAwOCArMDgwMApAQCAtNzkzLDcwICs3OTMsNTggQEAgb3V0Ogog CXJldHVybiAwOwogfQoKLXUzMiBidHJmc19jb3VudF9zbmFwc2hvdHNfaW5fcGF0aChzdHJ1Y3Qg YnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkgIHN0cnVjdCBidHJmc19wYXRoICpjb3VudF9wYXRoLAot CQkJCSAgdTY0IGV4cGVjdGVkX293bmVyLAotCQkJCSAgdTY0IGZpcnN0X2V4dGVudCkKK3N0YXRp YyBpbnQgZ2V0X3JlZmVyZW5jZV9zdGF0dXMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJ dTY0IHBhcmVudF9vd25lciwgdTY0IHBhcmVudF9nZW4sCisJCQkgICAgICAgIHU2NCByZWZfb2Jq ZWN0aWQsIHU2NCBieXRlbnIsCisJCQkgICAgICAgIHU2NCAqbWluX2dlbmVyYXRpb24sIHUzMiAq cmVmX2NvdW50KQogewogCXN0cnVjdCBidHJmc19yb290ICpleHRlbnRfcm9vdCA9IHJvb3QtPmZz X2luZm8tPmV4dGVudF9yb290OwogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwotCXU2NCBieXRl bnI7Ci0JdTY0IGZvdW5kX29iamVjdGlkOwotCXU2NCBmb3VuZF9vd25lcjsKLQl1NjQgcm9vdF9v YmplY3RpZCA9IHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkOwotCXUzMiB0b3RhbF9jb3VudCA9IDA7 Ci0JdTMyIGV4dGVudF9yZWZzOwotCXUzMiBjdXJfY291bnQ7Ci0JdTMyIG5yaXRlbXM7Ci0JaW50 IHJldDsKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVhZjsKKwlzdHJ1Y3QgYnRyZnNfZXh0ZW50 X3JlZiAqcmVmX2l0ZW07CiAJc3RydWN0IGJ0cmZzX2tleSBrZXk7CiAJc3RydWN0IGJ0cmZzX2tl eSBmb3VuZF9rZXk7Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKmw7Ci0Jc3RydWN0IGJ0cmZzX2V4 dGVudF9pdGVtICppdGVtOwotCXN0cnVjdCBidHJmc19leHRlbnRfcmVmICpyZWZfaXRlbTsKLQlp bnQgbGV2ZWwgPSAtMTsKLQotCS8qIEZJWE1FLCBuZWVkcyBsb2NraW5nICovCi0JQlVHKCk7Ci0K LQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT5hbGxvY19tdXRleCk7Ci0JcGF0aCA9IGJ0cmZz X2FsbG9jX3BhdGgoKTsKLWFnYWluOgotCWlmIChsZXZlbCA9PSAtMSkKLQkJYnl0ZW5yID0gZmly c3RfZXh0ZW50OwotCWVsc2UKLQkJYnl0ZW5yID0gY291bnRfcGF0aC0+bm9kZXNbbGV2ZWxdLT5z dGFydDsKLQotCWN1cl9jb3VudCA9IDA7CisJdTY0IHJlZl9nZW5lcmF0aW9uOworCXUzMiBucml0 ZW1zOworCWludCByZXQ7CisKIAlrZXkub2JqZWN0aWQgPSBieXRlbnI7CiAJa2V5Lm9mZnNldCA9 IDA7Ci0KLQlidHJmc19zZXRfa2V5X3R5cGUoJmtleSwgQlRSRlNfRVhURU5UX0lURU1fS0VZKTsK KwlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWTsKKworCXBhdGggPSBidHJmc19hbGxv Y19wYXRoKCk7CisJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+YWxsb2NfbXV0ZXgpOwogCXJl dCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIGV4dGVudF9yb290LCAma2V5LCBwYXRoLCAwLCAw KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAJQlVHX09OKHJldCA9PSAwKTsKCi0JbCA9 IHBhdGgtPm5vZGVzWzBdOwotCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShsLCAmZm91bmRfa2V5LCBw YXRoLT5zbG90c1swXSk7CisJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOworCWJ0cmZzX2l0ZW1fa2V5 X3RvX2NwdShsZWFmLCAmZm91bmRfa2V5LCBwYXRoLT5zbG90c1swXSk7CgogCWlmIChmb3VuZF9r ZXkub2JqZWN0aWQgIT0gYnl0ZW5yIHx8CiAJICAgIGZvdW5kX2tleS50eXBlICE9IEJUUkZTX0VY VEVOVF9JVEVNX0tFWSkgeworCQlyZXQgPSAxOwogCQlnb3RvIG91dDsKIAl9CgotCWl0ZW0gPSBi dHJmc19pdGVtX3B0cihsLCBwYXRoLT5zbG90c1swXSwgc3RydWN0IGJ0cmZzX2V4dGVudF9pdGVt KTsKLQlleHRlbnRfcmVmcyA9IGJ0cmZzX2V4dGVudF9yZWZzKGwsIGl0ZW0pOworCWlmIChyZWZf Y291bnQpCisJCSpyZWZfY291bnQgPSAwOworCWlmIChtaW5fZ2VuZXJhdGlvbikKKwkJKm1pbl9n ZW5lcmF0aW9uID0gKHU2NCktMTsKKwogCXdoaWxlICgxKSB7Ci0JCWwgPSBwYXRoLT5ub2Rlc1sw XTsKLQkJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGwpOworCQlsZWFmID0gcGF0aC0+ bm9kZXNbMF07CisJCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKTsKIAkJaWYg KHBhdGgtPnNsb3RzWzBdID49IG5yaXRlbXMpIHsKIAkJCXJldCA9IGJ0cmZzX25leHRfbGVhZihl eHRlbnRfcm9vdCwgcGF0aCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKIAkJCWlm IChyZXQgPT0gMCkKIAkJCQljb250aW51ZTsKIAkJCWJyZWFrOwogCQl9Ci0JCWJ0cmZzX2l0ZW1f a2V5X3RvX2NwdShsLCAmZm91bmRfa2V5LCBwYXRoLT5zbG90c1swXSk7CisJCWJ0cmZzX2l0ZW1f a2V5X3RvX2NwdShsZWFmLCAmZm91bmRfa2V5LCBwYXRoLT5zbG90c1swXSk7CiAJCWlmIChmb3Vu ZF9rZXkub2JqZWN0aWQgIT0gYnl0ZW5yKQogCQkJYnJlYWs7CgpAQCAtODY1LDU3ICs4NTMsMTI2 IEBAIGFnYWluOgogCQkJY29udGludWU7CiAJCX0KCi0JCWN1cl9jb3VudCsrOwotCQlyZWZfaXRl bSA9IGJ0cmZzX2l0ZW1fcHRyKGwsIHBhdGgtPnNsb3RzWzBdLAorCQlyZWZfaXRlbSA9IGJ0cmZz X2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAogCQkJCQkgIHN0cnVjdCBidHJmc19leHRl bnRfcmVmKTsKLQkJZm91bmRfb2JqZWN0aWQgPSBidHJmc19yZWZfcm9vdChsLCByZWZfaXRlbSk7 Ci0KLQkJaWYgKGZvdW5kX29iamVjdGlkICE9IHJvb3Rfb2JqZWN0aWQpIHsKLQkJCXRvdGFsX2Nv dW50ID0gMjsKKwkJcmVmX2dlbmVyYXRpb24gPSBidHJmc19yZWZfZ2VuZXJhdGlvbihsZWFmLCBy ZWZfaXRlbSk7CisJCS8qCisJCSAqIEZvciAocGFyZW50X2dlbiA+IDAgJiYgcGFyZW50X2dlbiA+ IHJlZl9nZW4pOgorCQkgKgorCQkgKiB3ZSByZWFjaCBoZXJlIHRocm91Z2ggdGhlIG9sZGVzdCBy b290LCB0aGVyZWZvcmUKKwkJICogYWxsIG90aGVyIHJlZmVyZW5jZSBmcm9tIHNhbWUgc25hcHNo b3Qgc2hvdWxkIGhhdmUKKwkJICogYSBsYXJnZXIgZ2VuZXJhdGlvbi4KKwkJICovCisJCWlmICgo cGFyZW50X293bmVyICE9IGJ0cmZzX3JlZl9yb290KGxlYWYsIHJlZl9pdGVtKSkgfHwKKwkJICAg IChwYXJlbnRfZ2VuID4gMCAmJiBwYXJlbnRfZ2VuID4gcmVmX2dlbmVyYXRpb24pIHx8CisJCSAg ICAocmVmX29iamVjdGlkID49IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQgJiYKKwkJICAgICBy ZWZfb2JqZWN0aWQgIT0gYnRyZnNfcmVmX29iamVjdGlkKGxlYWYsIHJlZl9pdGVtKSkpIHsKKwkJ CWlmIChyZWZfY291bnQpCisJCQkJKnJlZl9jb3VudCA9IDI7CisJCQlicmVhazsKKwkJfQorCQlp ZiAocmVmX2NvdW50KQorCQkJKnJlZl9jb3VudCA9IDE7CisJCWlmIChtaW5fZ2VuZXJhdGlvbiAm JiAqbWluX2dlbmVyYXRpb24gPiByZWZfZ2VuZXJhdGlvbikKKwkJCSptaW5fZ2VuZXJhdGlvbiA9 IHJlZl9nZW5lcmF0aW9uOworCisJCXBhdGgtPnNsb3RzWzBdKys7CisJfQorCXJldCA9IDA7Citv dXQ6CisJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5hbGxvY19tdXRleCk7CisJYnRyZnNf ZnJlZV9wYXRoKHBhdGgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBidHJmc19oYXNfY3Jvc3Nf cmVmZXJlbmNlKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgc3RydWN0IGJ0cmZz X2tleSAqa2V5LCB1NjQgYnl0ZW5yKQoreworCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRy YW5zOworCXN0cnVjdCBidHJmc19wYXRoICpwYXRoID0gTlVMTDsKKwlzdHJ1Y3QgYnRyZnNfcm9v dCAqb2xkZXN0X3Jvb3Q7CisJc3RydWN0IGV4dGVudF9idWZmZXIgKmViOworCXN0cnVjdCBidHJm c19maWxlX2V4dGVudF9pdGVtICppdGVtOworCXU2NCByZWZfb3duZXIgPSByb290LT5yb290X2tl eS5vYmplY3RpZDsKKwl1NjQgcmVmX2dlbmVyYXRpb247CisJdTY0IG1pbl9nZW5lcmF0aW9uOwor CXU2NCBleHRlbnRfc3RhcnQ7CisJdTMyIHJlZl9jb3VudDsKKwlpbnQgbGV2ZWw7CisJaW50IHJl dDsKKworCUJVR19PTihrZXktPnR5cGUgIT0gQlRSRlNfRVhURU5UX0RBVEFfS0VZKTsKKworCXJl dCA9IGdldF9yZWZlcmVuY2Vfc3RhdHVzKHJvb3QsIHJlZl9vd25lciwgMCwga2V5LT5vYmplY3Rp ZCwKKwkJCQkgICBieXRlbnIsICZtaW5fZ2VuZXJhdGlvbiwgJnJlZl9jb3VudCk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChyZWZfY291bnQgIT0gMSkKKwkJcmV0dXJuIDE7CisK KwlvbGRlc3Rfcm9vdCA9IGttYWxsb2Moc2l6ZW9mKCpvbGRlc3Rfcm9vdCksIEdGUF9OT0ZTKTsK KwlCVUdfT04oIW9sZGVzdF9yb290KTsKKworCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rp b24ocm9vdCwgMCk7CisJQlVHX09OKCF0cmFucyk7CisKKwltZW1jcHkob2xkZXN0X3Jvb3QsIHJv b3QsIHNpemVvZigqb2xkZXN0X3Jvb3QpKTsKKwlvbGRlc3Rfcm9vdC0+bm9kZSA9IHJvb3QtPmNv bW1pdF9yb290OworCW9sZGVzdF9yb290LT5jb21taXRfcm9vdCA9IE5VTEw7CisJcmVmX2dlbmVy YXRpb24gPSBvbGRlc3Rfcm9vdC0+cm9vdF9rZXkub2Zmc2V0OworCisJLyogYWxsIHJlZmVyZW5j ZXMgYXJlIGNyZWF0ZWQgYWZ0ZXIgdGhlIGxhdGVzdCBzbmFwc2hvdCAqLworCWlmIChtaW5fZ2Vu ZXJhdGlvbiA+IHJlZl9nZW5lcmF0aW9uKSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0K KworCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJcGF0aC0+c2tpcF9sb2NraW5nID0gMTsK KworCS8qIGlmIG5vIGl0ZW0gZm91bmQsIHRoZSBleHRlbnQgaXMgcmVmZXJlbmNlZCBieSBvdGhl ciBzbmFwc2hvdCAqLworCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIG9sZGVzdF9yb290 LCBrZXksIHBhdGgsIDAsIDApOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJZWIgPSBwYXRo LT5ub2Rlc1swXTsKKwlpdGVtID0gYnRyZnNfaXRlbV9wdHIoZWIsIHBhdGgtPnNsb3RzWzBdLAor CQkJICAgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOworCWlmIChidHJmc19maWxl X2V4dGVudF90eXBlKGViLCBpdGVtKSAhPSBCVFJGU19GSUxFX0VYVEVOVF9SRUcgfHwKKwkgICAg YnRyZnNfZmlsZV9leHRlbnRfZGlza19ieXRlbnIoZWIsIGl0ZW0pICE9IGJ5dGVucikgeworCQly ZXQgPSAxOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGxldmVsID0gQlRSRlNfTUFYX0xFVkVM IC0gMTsgbGV2ZWwgPj0gLTE7IGxldmVsLS0pIHsKKwkJaWYgKGxldmVsID49IDApIHsKKwkJCWVi ID0gcGF0aC0+bm9kZXNbbGV2ZWxdOworCQkJaWYgKCFlYikKKwkJCQljb250aW51ZTsKKwkJCWV4 dGVudF9zdGFydCA9IGViLT5zdGFydDsKKwkJfSBlbHNlCisJCQlleHRlbnRfc3RhcnQgPSBieXRl bnI7CisKKwkJcmV0ID0gZ2V0X3JlZmVyZW5jZV9zdGF0dXMocm9vdCwgcmVmX293bmVyLCByZWZf Z2VuZXJhdGlvbiwgMCwKKwkJCQkJICAgZXh0ZW50X3N0YXJ0LCBOVUxMLCAmcmVmX2NvdW50KTsK KwkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwotCQl9Ci0JCWlmIChsZXZlbCA9PSAtMSkgewotCQkJ Zm91bmRfb3duZXIgPSBidHJmc19yZWZfb2JqZWN0aWQobCwgcmVmX2l0ZW0pOwotCQkJaWYgKGZv dW5kX293bmVyICE9IGV4cGVjdGVkX293bmVyKSB7Ci0JCQkJdG90YWxfY291bnQgPSAyOwotCQkJ CWdvdG8gb3V0OwotCQkJfQotCQkJLyoKLQkJCSAqIG5hc3R5LiAgd2UgZG9uJ3QgY291bnQgYSBy ZWZlcmVuY2UgaGVsZCBieQotCQkJICogdGhlIHJ1bm5pbmcgdHJhbnNhY3Rpb24uICBUaGlzIGFs bG93cyBub2RhdGFjb3cKLQkJCSAqIHRvIGF2b2lkIGNvdyBtb3N0IG9mIHRoZSB0aW1lCi0JCQkg Ki8KLQkJCWlmIChmb3VuZF9vd25lciA+PSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEICYmCi0J CQkgICAgYnRyZnNfcmVmX2dlbmVyYXRpb24obCwgcmVmX2l0ZW0pID09Ci0JCQkgICAgcm9vdC0+ ZnNfaW5mby0+Z2VuZXJhdGlvbikgewotCQkJCWV4dGVudF9yZWZzLS07Ci0JCQl9Ci0JCX0KLQkJ dG90YWxfY291bnQgPSAxOwotCQlwYXRoLT5zbG90c1swXSsrOwotCX0KLQkvKgotCSAqIGlmIHRo ZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVmZXJlbmNlIGFnYWluc3QgYSBkYXRhIGV4dGVudCwKLQkg KiB3ZSBoYXZlIHRvIGFzc3VtZSB0aGUgb3RoZXIgcmVmIGlzIGFub3RoZXIgc25hcHNob3QKLQkg Ki8KLQlpZiAobGV2ZWwgPT0gLTEgJiYgZXh0ZW50X3JlZnMgPiAxKSB7Ci0JCXRvdGFsX2NvdW50 ID0gMjsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChjdXJfY291bnQgPT0gMCkgewotCQl0b3RhbF9j b3VudCA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAobGV2ZWwgPj0gMCAmJiByb290LT5ub2Rl ID09IGNvdW50X3BhdGgtPm5vZGVzW2xldmVsXSkKLQkJZ290byBvdXQ7Ci0JbGV2ZWwrKzsKLQli dHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7Ci0JZ290byBhZ2FpbjsKLQorCisJCWlmIChy ZWZfY291bnQgIT0gMSkgeworCQkJcmV0ID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChs ZXZlbCA+PSAwKQorCQkJcmVmX2dlbmVyYXRpb24gPSBidHJmc19oZWFkZXJfZ2VuZXJhdGlvbihl Yik7CisJfQorCXJldCA9IDA7CiBvdXQ6Ci0JYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCW11dGV4 X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+YWxsb2NfbXV0ZXgpOwotCXJldHVybiB0b3RhbF9jb3Vu dDsKKwlpZiAocGF0aCkKKwkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOworCWJ0cmZzX2VuZF90cmFu c2FjdGlvbih0cmFucywgcm9vdCk7CisJa2ZyZWUob2xkZXN0X3Jvb3QpOworCXJldHVybiByZXQ7 CiB9CgogaW50IGJ0cmZzX2luY19yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMs IHN0cnVjdCBidHJmc19yb290ICpyb290LApkaWZmIC1yIDNmMGVlZTgwNDk3NCBpbm9kZS5jCi0t LSBhL2lub2RlLmMJVGh1IEp1biAyNiAxMDozNDoyMCAyMDA4IC0wNDAwCisrKyBiL2lub2RlLmMJ RnJpIEp1bCAxOCAwMzoyMjozNCAyMDA4ICswODAwCkBAIC0yMzIsOCArMjMyLDcgQEAgYWdhaW46 CiAJCWlmIChieXRlbnIgPT0gMCkKIAkJCWdvdG8gbm90X2ZvdW5kOwoKLQkJaWYgKGJ0cmZzX2Nv dW50X3NuYXBzaG90c19pbl9wYXRoKHJvb3QsIHBhdGgsIGlub2RlLT5pX2lubywKLQkJCQkJCSAg Ynl0ZW5yKSAhPSAxKSB7CisJCWlmIChidHJmc19oYXNfY3Jvc3NfcmVmZXJlbmNlKHJvb3QsICZm b3VuZF9rZXksIGJ5dGVucikpIHsKIAkJCWdvdG8gbm90X2ZvdW5kOwogCQl9CgpAQCAtMjYwLDYg KzI1OSw3IEBAIGxvb3A6CiAJZ290byBhZ2FpbjsKCiBub3RfZm91bmQ6CisJYnRyZnNfcmVsZWFz ZV9wYXRoKHJvb3QsIHBhdGgpOwogCWNvd19maWxlX3JhbmdlKGlub2RlLCBzdGFydCwgZW5kKTsK IAlzdGFydCA9IGVuZCArIDE7CiAJZ290byBsb29wOwo= ------=_Part_10966_11760262.1216347235435--