From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yan Zheng" Subject: [PATCH] New nodatacow checker Date: Wed, 30 Jul 2008 01:40:17 +0800 Message-ID: <3d0408630807291040t64a8518ne840f6c618ee7332@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_31409_14466894.1217353217597" To: linux-btrfs@vger.kernel.org Return-path: List-ID: ------=_Part_31409_14466894.1217353217597 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello, This is updated version of nodatacow patch. To check whether a given file extent is referenced by multiple snapshots, the checker walks down the fs tree through dead root and checks all tree blocks in the path. We can easily detect whether a given tree block is directly referenced by other snapshot. We can also detect any indirect reference from other snapshot by checking reference's generation. The checker can always detect multiple references, but can't reliably detect cases of single reference. So btrfs may do file data cow even there is only one reference. Regards YZ ------=_Part_31409_14466894.1217353217597 Content-Type: text/x-patch; name=nocow.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fj8se5uw0 Content-Disposition: attachment; filename=nocow.patch ZGlmZiAtciBkMjFjOTgyZTNmOWYgY3RyZWUuaAotLS0gYS9jdHJlZS5oCU1vbiBKdWwgMjggMTU6 MzI6NTEgMjAwOCAtMDQwMAorKysgYi9jdHJlZS5oCVR1ZSBKdWwgMjkgMTQ6MzU6MjcgMjAwOCAr MDgwMApAQCAtNjE2LDcgKzYxNiw3IEBAIHN0cnVjdCBidHJmc19sZWFmX3JlZl90cmVlIHsKICAq IGluIHJhbSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJlZS4gIGV4dGVudF9yb290IGlzIHVzZWQg Zm9yIGFsbCBhbGxvY2F0aW9ucwogICogYW5kIGZvciB0aGUgZXh0ZW50IHRyZWUgZXh0ZW50X3Jv b3Qgcm9vdC4KICAqLwotc3RydWN0IGRpcnR5X3Jvb3Q7CitzdHJ1Y3QgYnRyZnNfZGlydHlfcm9v dDsKIHN0cnVjdCBidHJmc19yb290IHsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbm9kZTsKIApA QCAtNjI2LDcgKzYyNiw3IEBAIHN0cnVjdCBidHJmc19yb290IHsKIAlzdHJ1Y3QgZXh0ZW50X2J1 ZmZlciAqY29tbWl0X3Jvb3Q7CiAJc3RydWN0IGJ0cmZzX2xlYWZfcmVmX3RyZWUgKnJlZl90cmVl OwogCXN0cnVjdCBidHJmc19sZWFmX3JlZl90cmVlIHJlZl90cmVlX3N0cnVjdDsKLQlzdHJ1Y3Qg ZGlydHlfcm9vdCAqZGlydHlfcm9vdDsKKwlzdHJ1Y3QgYnRyZnNfZGlydHlfcm9vdCAqZGlydHlf cm9vdDsKIAogCXN0cnVjdCBidHJmc19yb290X2l0ZW0gcm9vdF9pdGVtOwogCXN0cnVjdCBidHJm c19rZXkgcm9vdF9rZXk7CkBAIC0xMzk4LDkgKzEzOTgsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVj dCBkZW50cnkgKmZkZW50cnkoc3RyCiB9CiAKIC8qIGV4dGVudC10cmVlLmMgKi8KLXUzMiBidHJm c19jb3VudF9zbmFwc2hvdHNfaW5fcGF0aChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkg IHN0cnVjdCBidHJmc19wYXRoICpjb3VudF9wYXRoLAotCQkJCSAgdTY0IGV4cGVjdGVkX293bmVy LCB1NjQgZmlyc3RfZXh0ZW50KTsKK2ludCBidHJmc19jcm9zc19yZWZfZXhpc3RzKHN0cnVjdCBi dHJmc19yb290ICpyb290LAorCQkJICAgc3RydWN0IGJ0cmZzX2tleSAqa2V5LCB1NjQgYnl0ZW5y KTsKIGludCBidHJmc19leHRlbnRfcG9zdF9vcChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0 cmFucywKIAkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7CiBpbnQgYnRyZnNfY29weV9waW5u ZWQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqY29weSk7 CmRpZmYgLXIgZDIxYzk4MmUzZjlmIGV4dGVudC10cmVlLmMKLS0tIGEvZXh0ZW50LXRyZWUuYwlN b24gSnVsIDI4IDE1OjMyOjUxIDIwMDggLTA0MDAKKysrIGIvZXh0ZW50LXRyZWUuYwlUdWUgSnVs IDI5IDIxOjQ0OjA1IDIwMDggKzA4MDAKQEAgLTgwMiw3MCArODAyLDU3IEBAIG91dDoKIAlyZXR1 cm4gMDsKIH0KIAotdTMyIGJ0cmZzX2NvdW50X3NuYXBzaG90c19pbl9wYXRoKHN0cnVjdCBidHJm c19yb290ICpyb290LAotCQkJCSAgc3RydWN0IGJ0cmZzX3BhdGggKmNvdW50X3BhdGgsCi0JCQkJ ICB1NjQgZXhwZWN0ZWRfb3duZXIsCi0JCQkJICB1NjQgZmlyc3RfZXh0ZW50KQorCitzdGF0aWMg aW50IGdldF9yZWZlcmVuY2Vfc3RhdHVzKHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgYnl0 ZW5yLAorCQkJCXU2NCBwYXJlbnRfZ2VuLCB1NjQgcmVmX29iamVjdGlkLAorCQkJICAgICAgICB1 NjQgKm1pbl9nZW5lcmF0aW9uLCB1MzIgKnJlZl9jb3VudCkKIHsKIAlzdHJ1Y3QgYnRyZnNfcm9v dCAqZXh0ZW50X3Jvb3QgPSByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdDsKIAlzdHJ1Y3QgYnRy ZnNfcGF0aCAqcGF0aDsKLQl1NjQgYnl0ZW5yOwotCXU2NCBmb3VuZF9vYmplY3RpZDsKLQl1NjQg Zm91bmRfb3duZXI7Ci0JdTY0IHJvb3Rfb2JqZWN0aWQgPSByb290LT5yb290X2tleS5vYmplY3Rp ZDsKLQl1MzIgdG90YWxfY291bnQgPSAwOwotCXUzMiBleHRlbnRfcmVmczsKLQl1MzIgY3VyX2Nv dW50OwotCXUzMiBucml0ZW1zOwotCWludCByZXQ7CisJc3RydWN0IGV4dGVudF9idWZmZXIgKmxl YWY7CisJc3RydWN0IGJ0cmZzX2V4dGVudF9yZWYgKnJlZl9pdGVtOwogCXN0cnVjdCBidHJmc19r ZXkga2V5OwogCXN0cnVjdCBidHJmc19rZXkgZm91bmRfa2V5OwotCXN0cnVjdCBleHRlbnRfYnVm ZmVyICpsOwotCXN0cnVjdCBidHJmc19leHRlbnRfaXRlbSAqaXRlbTsKLQlzdHJ1Y3QgYnRyZnNf ZXh0ZW50X3JlZiAqcmVmX2l0ZW07Ci0JaW50IGxldmVsID0gLTE7Ci0KLQkvKiBGSVhNRSwgbmVl ZHMgbG9ja2luZyAqLwotCUJVRygpOwotCi0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+YWxs b2NfbXV0ZXgpOwotCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci1hZ2FpbjoKLQlpZiAobGV2 ZWwgPT0gLTEpCi0JCWJ5dGVuciA9IGZpcnN0X2V4dGVudDsKLQllbHNlCi0JCWJ5dGVuciA9IGNv dW50X3BhdGgtPm5vZGVzW2xldmVsXS0+c3RhcnQ7Ci0KLQljdXJfY291bnQgPSAwOworCXU2NCBy b290X29iamVjdGlkID0gcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQ7CisJdTY0IHJlZl9nZW5lcmF0 aW9uOworCXUzMiBucml0ZW1zOworCWludCByZXQ7CisKIAlrZXkub2JqZWN0aWQgPSBieXRlbnI7 CiAJa2V5Lm9mZnNldCA9IDA7Ci0KLQlidHJmc19zZXRfa2V5X3R5cGUoJmtleSwgQlRSRlNfRVhU RU5UX0lURU1fS0VZKTsKKwlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWTsKKworCXBh dGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+YWxs b2NfbXV0ZXgpOwogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIGV4dGVudF9yb290LCAm a2V5LCBwYXRoLCAwLCAwKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAJQlVHX09OKHJl dCA9PSAwKTsKIAotCWwgPSBwYXRoLT5ub2Rlc1swXTsKLQlidHJmc19pdGVtX2tleV90b19jcHUo bCwgJmZvdW5kX2tleSwgcGF0aC0+c2xvdHNbMF0pOworCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsK KwlidHJmc19pdGVtX2tleV90b19jcHUobGVhZiwgJmZvdW5kX2tleSwgcGF0aC0+c2xvdHNbMF0p OwogCiAJaWYgKGZvdW5kX2tleS5vYmplY3RpZCAhPSBieXRlbnIgfHwKIAkgICAgZm91bmRfa2V5 LnR5cGUgIT0gQlRSRlNfRVhURU5UX0lURU1fS0VZKSB7CisJCXJldCA9IDE7CiAJCWdvdG8gb3V0 OwogCX0KIAotCWl0ZW0gPSBidHJmc19pdGVtX3B0cihsLCBwYXRoLT5zbG90c1swXSwgc3RydWN0 IGJ0cmZzX2V4dGVudF9pdGVtKTsKLQlleHRlbnRfcmVmcyA9IGJ0cmZzX2V4dGVudF9yZWZzKGws IGl0ZW0pOworCSpyZWZfY291bnQgPSAwOworCSptaW5fZ2VuZXJhdGlvbiA9ICh1NjQpLTE7CisK IAl3aGlsZSAoMSkgewotCQlsID0gcGF0aC0+bm9kZXNbMF07Ci0JCW5yaXRlbXMgPSBidHJmc19o ZWFkZXJfbnJpdGVtcyhsKTsKKwkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOworCQlucml0ZW1zID0g YnRyZnNfaGVhZGVyX25yaXRlbXMobGVhZik7CiAJCWlmIChwYXRoLT5zbG90c1swXSA+PSBucml0 ZW1zKSB7CiAJCQlyZXQgPSBidHJmc19uZXh0X2xlYWYoZXh0ZW50X3Jvb3QsIHBhdGgpOworCQkJ aWYgKHJldCA8IDApCisJCQkJZ290byBvdXQ7CiAJCQlpZiAocmV0ID09IDApCiAJCQkJY29udGlu dWU7CiAJCQlicmVhazsKIAkJfQotCQlidHJmc19pdGVtX2tleV90b19jcHUobCwgJmZvdW5kX2tl eSwgcGF0aC0+c2xvdHNbMF0pOworCQlidHJmc19pdGVtX2tleV90b19jcHUobGVhZiwgJmZvdW5k X2tleSwgcGF0aC0+c2xvdHNbMF0pOwogCQlpZiAoZm91bmRfa2V5Lm9iamVjdGlkICE9IGJ5dGVu cikKIAkJCWJyZWFrOwogCkBAIC04NzQsNTcgKzg2MSwxMjAgQEAgYWdhaW46CiAJCQljb250aW51 ZTsKIAkJfQogCi0JCWN1cl9jb3VudCsrOwotCQlyZWZfaXRlbSA9IGJ0cmZzX2l0ZW1fcHRyKGws IHBhdGgtPnNsb3RzWzBdLAorCQlyZWZfaXRlbSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgt PnNsb3RzWzBdLAogCQkJCQkgIHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKLQkJZm91bmRfb2Jq ZWN0aWQgPSBidHJmc19yZWZfcm9vdChsLCByZWZfaXRlbSk7Ci0KLQkJaWYgKGZvdW5kX29iamVj dGlkICE9IHJvb3Rfb2JqZWN0aWQpIHsKLQkJCXRvdGFsX2NvdW50ID0gMjsKKwkJcmVmX2dlbmVy YXRpb24gPSBidHJmc19yZWZfZ2VuZXJhdGlvbihsZWFmLCByZWZfaXRlbSk7CisJCS8qCisJCSAq IEZvciAocGFyZW50X2dlbiA+IDAgJiYgcGFyZW50X2dlbiA+IHJlZl9nZW4pOgorCQkgKgorCQkg KiB3ZSByZWFjaCBoZXJlIHRocm91Z2ggdGhlIG9sZGVzdCByb290LCB0aGVyZWZvcmUgCisJCSAq IGFsbCBvdGhlciByZWZlcmVuY2UgZnJvbSBzYW1lIHNuYXBzaG90IHNob3VsZCBoYXZlIAorCQkg KiBhIGxhcmdlciBnZW5lcmF0aW9uLgorCQkgKi8KKwkJaWYgKChyb290X29iamVjdGlkICE9IGJ0 cmZzX3JlZl9yb290KGxlYWYsIHJlZl9pdGVtKSkgfHwKKwkJICAgIChwYXJlbnRfZ2VuID4gMCAm JiBwYXJlbnRfZ2VuID4gcmVmX2dlbmVyYXRpb24pIHx8CisJCSAgICAocmVmX29iamVjdGlkID49 IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQgJiYKKwkJICAgICByZWZfb2JqZWN0aWQgIT0gYnRy ZnNfcmVmX29iamVjdGlkKGxlYWYsIHJlZl9pdGVtKSkpIHsKKwkJCWlmIChyZWZfY291bnQpCisJ CQkJKnJlZl9jb3VudCA9IDI7CisJCQlicmVhazsKKwkJfQorCisJCSpyZWZfY291bnQgPSAxOwor CQlpZiAoKm1pbl9nZW5lcmF0aW9uID4gcmVmX2dlbmVyYXRpb24pCisJCQkqbWluX2dlbmVyYXRp b24gPSByZWZfZ2VuZXJhdGlvbjsKKworCQlwYXRoLT5zbG90c1swXSsrOworCX0KKwlyZXQgPSAw Oworb3V0OgorCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+YWxsb2NfbXV0ZXgpOworCWJ0 cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgYnRyZnNfY3Jvc3Nf cmVmX2V4aXN0cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSAgIHN0cnVjdCBidHJmc19r ZXkgKmtleSwgdTY0IGJ5dGVucikKK3sKKwlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFu czsKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqb2xkX3Jvb3Q7CisJc3RydWN0IGJ0cmZzX3BhdGggKnBh dGggPSBOVUxMOworCXN0cnVjdCBleHRlbnRfYnVmZmVyICplYjsKKwlzdHJ1Y3QgYnRyZnNfZmls ZV9leHRlbnRfaXRlbSAqaXRlbTsKKwl1NjQgcmVmX2dlbmVyYXRpb247CisJdTY0IG1pbl9nZW5l cmF0aW9uOworCXU2NCBleHRlbnRfc3RhcnQ7CisJdTMyIHJlZl9jb3VudDsKKwlpbnQgbGV2ZWw7 CisJaW50IHJldDsKKworCUJVR19PTihrZXktPnR5cGUgIT0gQlRSRlNfRVhURU5UX0RBVEFfS0VZ KTsKKwlyZXQgPSBnZXRfcmVmZXJlbmNlX3N0YXR1cyhyb290LCBieXRlbnIsIDAsIGtleS0+b2Jq ZWN0aWQsCisJCQkJICAgJm1pbl9nZW5lcmF0aW9uLCAmcmVmX2NvdW50KTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJaWYgKHJlZl9jb3VudCAhPSAxKQorCQlyZXR1cm4gMTsKKworCXRy YW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJb2xkX3Jvb3QgPSByb290 LT5kaXJ0eV9yb290LT5yb290OworCXJlZl9nZW5lcmF0aW9uID0gb2xkX3Jvb3QtPnJvb3Rfa2V5 Lm9mZnNldDsKKworCS8qIGFsbCByZWZlcmVuY2VzIGFyZSBjcmVhdGVkIGluIHJ1bm5pbmcgdHJh bnNhY3Rpb24gKi8KKwlpZiAobWluX2dlbmVyYXRpb24gPiByZWZfZ2VuZXJhdGlvbikgeworCQly ZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwor CWlmICghcGF0aCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlwYXRo LT5za2lwX2xvY2tpbmcgPSAxOworCS8qIGlmIG5vIGl0ZW0gZm91bmQsIHRoZSBleHRlbnQgaXMg cmVmZXJlbmNlZCBieSBvdGhlciBzbmFwc2hvdCAqLworCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90 KE5VTEwsIG9sZF9yb290LCBrZXksIHBhdGgsIDAsIDApOworCWlmIChyZXQpCisJCWdvdG8gb3V0 OworCisJZWIgPSBwYXRoLT5ub2Rlc1swXTsKKwlpdGVtID0gYnRyZnNfaXRlbV9wdHIoZWIsIHBh dGgtPnNsb3RzWzBdLAorCQkJICAgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwor CWlmIChidHJmc19maWxlX2V4dGVudF90eXBlKGViLCBpdGVtKSAhPSBCVFJGU19GSUxFX0VYVEVO VF9SRUcgfHwKKwkgICAgYnRyZnNfZmlsZV9leHRlbnRfZGlza19ieXRlbnIoZWIsIGl0ZW0pICE9 IGJ5dGVucikgeworCQlyZXQgPSAxOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGxldmVsID0g QlRSRlNfTUFYX0xFVkVMIC0gMTsgbGV2ZWwgPj0gLTE7IGxldmVsLS0pIHsKKwkJaWYgKGxldmVs ID49IDApIHsKKwkJCWViID0gcGF0aC0+bm9kZXNbbGV2ZWxdOworCQkJaWYgKCFlYikKKwkJCQlj b250aW51ZTsKKwkJCWV4dGVudF9zdGFydCA9IGViLT5zdGFydDsKKwkJfSBlbHNlIAorCQkJZXh0 ZW50X3N0YXJ0ID0gYnl0ZW5yOworCisJCXJldCA9IGdldF9yZWZlcmVuY2Vfc3RhdHVzKHJvb3Qs IGV4dGVudF9zdGFydCwgcmVmX2dlbmVyYXRpb24sCisJCQkJCSAgIDAsICZtaW5fZ2VuZXJhdGlv biwgJnJlZl9jb3VudCk7CisJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKLQkJfQotCQlpZiAobGV2 ZWwgPT0gLTEpIHsKLQkJCWZvdW5kX293bmVyID0gYnRyZnNfcmVmX29iamVjdGlkKGwsIHJlZl9p dGVtKTsKLQkJCWlmIChmb3VuZF9vd25lciAhPSBleHBlY3RlZF9vd25lcikgewotCQkJCXRvdGFs X2NvdW50ID0gMjsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCS8qCi0JCQkgKiBuYXN0eS4gIHdl IGRvbid0IGNvdW50IGEgcmVmZXJlbmNlIGhlbGQgYnkKLQkJCSAqIHRoZSBydW5uaW5nIHRyYW5z YWN0aW9uLiAgVGhpcyBhbGxvd3Mgbm9kYXRhY293Ci0JCQkgKiB0byBhdm9pZCBjb3cgbW9zdCBv ZiB0aGUgdGltZQotCQkJICovCi0JCQlpZiAoZm91bmRfb3duZXIgPj0gQlRSRlNfRklSU1RfRlJF RV9PQkpFQ1RJRCAmJgotCQkJICAgIGJ0cmZzX3JlZl9nZW5lcmF0aW9uKGwsIHJlZl9pdGVtKSA9 PQotCQkJICAgIHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24pIHsKLQkJCQlleHRlbnRfcmVmcy0t OwotCQkJfQotCQl9Ci0JCXRvdGFsX2NvdW50ID0gMTsKLQkJcGF0aC0+c2xvdHNbMF0rKzsKLQl9 Ci0JLyoKLQkgKiBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJlZmVyZW5jZSBhZ2FpbnN0IGEg ZGF0YSBleHRlbnQsCi0JICogd2UgaGF2ZSB0byBhc3N1bWUgdGhlIG90aGVyIHJlZiBpcyBhbm90 aGVyIHNuYXBzaG90Ci0JICovCi0JaWYgKGxldmVsID09IC0xICYmIGV4dGVudF9yZWZzID4gMSkg ewotCQl0b3RhbF9jb3VudCA9IDI7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAoY3VyX2NvdW50ID09 IDApIHsKLQkJdG90YWxfY291bnQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGxldmVsID49 IDAgJiYgcm9vdC0+bm9kZSA9PSBjb3VudF9wYXRoLT5ub2Rlc1tsZXZlbF0pCi0JCWdvdG8gb3V0 OwotCWxldmVsKys7Ci0JYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwotCWdvdG8gYWdh aW47Ci0KKworCQlpZiAocmVmX2NvdW50ICE9IDEpIHsKKwkJCXJldCA9IDE7CisJCQlnb3RvIG91 dDsKKwkJfQorCQlpZiAobGV2ZWwgPj0gMCkKKwkJCXJlZl9nZW5lcmF0aW9uID0gYnRyZnNfaGVh ZGVyX2dlbmVyYXRpb24oZWIpOworCX0KKwlyZXQgPSAwOwogb3V0OgotCWJ0cmZzX2ZyZWVfcGF0 aChwYXRoKTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPmFsbG9jX211dGV4KTsKLQly ZXR1cm4gdG90YWxfY291bnQ7CisJaWYgKHBhdGgpCisJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsK KwlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCXJldHVybiByZXQ7CiB9CiAK IGludCBidHJmc19pbmNfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCBzdHJ1 Y3QgYnRyZnNfcm9vdCAqcm9vdCwKZGlmZiAtciBkMjFjOTgyZTNmOWYgaW5vZGUuYwotLS0gYS9p bm9kZS5jCU1vbiBKdWwgMjggMTU6MzI6NTEgMjAwOCAtMDQwMAorKysgYi9pbm9kZS5jCVR1ZSBK dWwgMjkgMjM6MjU6NDggMjAwOCArMDgwMApAQCAtMjQ5LDExICsyNDksOCBAQCBhZ2FpbjoKIAkJ aWYgKGJ5dGVuciA9PSAwKQogCQkJZ290byBub3RfZm91bmQ7CiAKLQkJaWYgKGJ0cmZzX2NvdW50 X3NuYXBzaG90c19pbl9wYXRoKHJvb3QsIHBhdGgsIGlub2RlLT5pX2lubywKLQkJCQkJCSAgYnl0 ZW5yKSAhPSAxKSB7CisJCWlmIChidHJmc19jcm9zc19yZWZfZXhpc3RzKHJvb3QsICZmb3VuZF9r ZXksIGJ5dGVucikpCiAJCQlnb3RvIG5vdF9mb3VuZDsKLQkJfQotCiAJCS8qCiAJCSAqIHdlIG1h eSBiZSBjYWxsZWQgYnkgdGhlIHJlc2l6ZXIsIG1ha2Ugc3VyZSB3ZSdyZSBpbnNpZGUKIAkJICog dGhlIGxpbWl0cyBvZiB0aGUgRlMKQEAgLTI3Nyw2ICsyNzQsNyBAQCBsb29wOgogCWdvdG8gYWdh aW47CiAKIG5vdF9mb3VuZDoKKwlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CiAJY293 X2ZpbGVfcmFuZ2UoaW5vZGUsIHN0YXJ0LCBlbmQpOwogCXN0YXJ0ID0gZW5kICsgMTsKIAlnb3Rv IGxvb3A7CmRpZmYgLXIgZDIxYzk4MmUzZjlmIHRyYW5zYWN0aW9uLmMKLS0tIGEvdHJhbnNhY3Rp b24uYwlNb24gSnVsIDI4IDE1OjMyOjUxIDIwMDggLTA0MDAKKysrIGIvdHJhbnNhY3Rpb24uYwlU dWUgSnVsIDI5IDEzOjQwOjAyIDIwMDggKzA4MDAKQEAgLTMxLDEyICszMSw2IEBAIGV4dGVybiBz dHJ1Y3Qga21lbV9jYWNoZSAqYnRyZnNfdHJhbnNhY3QKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNo ZSAqYnRyZnNfdHJhbnNhY3Rpb25fY2FjaGVwOwogCiAjZGVmaW5lIEJUUkZTX1JPT1RfVFJBTlNf VEFHIDAKLQotc3RydWN0IGRpcnR5X3Jvb3QgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlz dHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdDsKLQlzdHJ1Y3QgYnRyZnNfcm9vdCAqbGF0ZXN0X3Jvb3Q7 Ci19OwogCiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBwdXRfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZz X3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbikKIHsKQEAgLTkxLDcgKzg1LDcgQEAgc3RhdGljIG5v aW5saW5lIGludCBqb2luX3RyYW5zYWN0aW9uKHN0cgogCiBzdGF0aWMgbm9pbmxpbmUgaW50IHJl Y29yZF9yb290X2luX3RyYW5zKHN0cnVjdCBidHJmc19yb290ICpyb290KQogewotCXN0cnVjdCBk aXJ0eV9yb290ICpkaXJ0eTsKKwlzdHJ1Y3QgYnRyZnNfZGlydHlfcm9vdCAqZGlydHk7CiAJdTY0 IHJ1bm5pbmdfdHJhbnNfaWQgPSByb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uLT50 cmFuc2lkOwogCWlmIChyb290LT5yZWZfY293cyAmJiByb290LT5sYXN0X3RyYW5zIDwgcnVubmlu Z190cmFuc19pZCkgewogCQlXQVJOX09OKHJvb3QgPT0gcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jv b3QpOwpAQCAtMzQzLDcgKzMzNyw3IEBAIGludCBidHJmc19hZGRfZGVhZF9yb290KHN0cnVjdCBi dHJmc19yb28KIAkJCXN0cnVjdCBidHJmc19yb290ICpsYXRlc3QsCiAJCQlzdHJ1Y3QgbGlzdF9o ZWFkICpkZWFkX2xpc3QpCiB7Ci0Jc3RydWN0IGRpcnR5X3Jvb3QgKmRpcnR5OworCXN0cnVjdCBi dHJmc19kaXJ0eV9yb290ICpkaXJ0eTsKIAogCWRpcnR5ID0ga21hbGxvYyhzaXplb2YoKmRpcnR5 KSwgR0ZQX05PRlMpOwogCWlmICghZGlydHkpCkBAIC0zNTgsNyArMzUyLDcgQEAgc3RhdGljIG5v aW5saW5lIGludCBhZGRfZGlydHlfcm9vdHMoc3RydQogCQkJCSAgICBzdHJ1Y3QgcmFkaXhfdHJl ZV9yb290ICpyYWRpeCwKIAkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKLQlzdHJ1 Y3QgZGlydHlfcm9vdCAqZGlydHk7CisJc3RydWN0IGJ0cmZzX2RpcnR5X3Jvb3QgKmRpcnR5Owog CXN0cnVjdCBidHJmc19yb290ICpnYW5nWzhdOwogCXN0cnVjdCBidHJmc19yb290ICpyb290Owog CWludCBpOwpAQCAtNDY5LDcgKzQ2Myw3IEBAIHN0YXRpYyBub2lubGluZSBpbnQgZHJvcF9kaXJ0 eV9yb290cyhzdHIKIHN0YXRpYyBub2lubGluZSBpbnQgZHJvcF9kaXJ0eV9yb290cyhzdHJ1Y3Qg YnRyZnNfcm9vdCAqdHJlZV9yb290LAogCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkK IHsKLQlzdHJ1Y3QgZGlydHlfcm9vdCAqZGlydHk7CisJc3RydWN0IGJ0cmZzX2RpcnR5X3Jvb3Qg KmRpcnR5OwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwogCXVuc2lnbmVkIGxv bmcgbnI7CiAJdTY0IG51bV9ieXRlczsKQEAgLTQ4MCw3ICs0NzQsNyBAQCBzdGF0aWMgbm9pbmxp bmUgaW50IGRyb3BfZGlydHlfcm9vdHMoc3RyCiAJd2hpbGUoIWxpc3RfZW1wdHkobGlzdCkpIHsK IAkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3Q7CiAKLQkJZGlydHkgPSBsaXN0X2VudHJ5KGxpc3Qt PnByZXYsIHN0cnVjdCBkaXJ0eV9yb290LCBsaXN0KTsKKwkJZGlydHkgPSBsaXN0X2VudHJ5KGxp c3QtPnByZXYsIHN0cnVjdCBidHJmc19kaXJ0eV9yb290LCBsaXN0KTsKIAkJbGlzdF9kZWxfaW5p dCgmZGlydHktPmxpc3QpOwogCiAJCW51bV9ieXRlcyA9IGJ0cmZzX3Jvb3RfdXNlZCgmZGlydHkt PnJvb3QtPnJvb3RfaXRlbSk7CmRpZmYgLXIgZDIxYzk4MmUzZjlmIHRyYW5zYWN0aW9uLmgKLS0t IGEvdHJhbnNhY3Rpb24uaAlNb24gSnVsIDI4IDE1OjMyOjUxIDIwMDggLTA0MDAKKysrIGIvdHJh bnNhY3Rpb24uaAlUdWUgSnVsIDI5IDEzOjM1OjI3IDIwMDggKzA4MDAKQEAgLTUyLDYgKzUyLDEx IEBAIHN0cnVjdCBidHJmc19wZW5kaW5nX3NuYXBzaG90IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxp c3Q7CiB9OwogCitzdHJ1Y3QgYnRyZnNfZGlydHlfcm9vdCB7CisJc3RydWN0IGxpc3RfaGVhZCBs aXN0OworCXN0cnVjdCBidHJmc19yb290ICpyb290OworCXN0cnVjdCBidHJmc19yb290ICpsYXRl c3Rfcm9vdDsKK307CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBidHJmc19zZXRfdHJhbnNfYmxvY2tf Z3JvdXAoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJCSAgICAgICBzdHJ1 Y3QgaW5vZGUgKmlub2RlKQo= ------=_Part_31409_14466894.1217353217597--