Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wJtZ4-000OWl-0x for pgsql-hackers@arkaria.postgresql.org; Mon, 04 May 2026 13:42:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wJtZ3-007R2y-0R for pgsql-hackers@arkaria.postgresql.org; Mon, 04 May 2026 13:42:25 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wJtZ2-007R2p-1u for pgsql-hackers@lists.postgresql.org; Mon, 04 May 2026 13:42:24 +0000 Received: from relay3-d.mail.gandi.net ([217.70.183.195]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wJtYy-000000009Ou-3Is0 for pgsql-hackers@postgresql.org; Mon, 04 May 2026 13:42:23 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 48ABC201C6 for ; Mon, 4 May 2026 13:42:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1777902138; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=Y6HDbcgSLlAT1BnyXETvKZlig8Jlf4btF0BvAtxVdQg=; b=RCTufY5p2BFSTH/FdBnN0hZKQ6Mb5MtldYSATgVE9yNLsu3+9R8rJdsEr0kupPjwrjqcEL HgHU+9gzoejhYgsrwY1Ks40BiD3yYw7XW1AiJAnub+iS+W9mAna0v/tOKyCzmXcZSwTdTm S7sERx37AN0Lez1Sow719PzDXNA3C4qKzdZF/sqBMFNPcyLV11kxQdLLXP/bwUeGT0ngKZ 4GEfN/hlKJvME1YNks8iq6jhGjFw32HIFhEuj306vwyxQn+hfN/TZo6F/kRLQHKdDb7Vkz a/oYfhekbO7VmV7c+Nj++F49lS3hsJ6LRP3nlXKIXK/6tL9Xb9ZHBNSA5qNVRA== Content-Type: multipart/mixed; boundary="------------tKwgbBZ2fGxcx25ADlBtJa5d" Message-ID: <37745926-4213-49a3-b628-4136e9e49f9b@vondra.me> Date: Mon, 4 May 2026 15:42:17 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: PostgreSQL Hackers From: Tomas Vondra Subject: allow spread checkpoints when changing checksums online X-GND-Sasl: tomas@vondra.me X-GND-State: clean X-GND-Score: -100 X-GND-Cause: dmFkZTFBsfy7gp73i39xqjhpLE1hSGLvvOZoicPCLnEHaAFKGLDjHznWID22tWn7bwl4qPhPpk/WB4w25dnG6O+v+869WZRtDfNrypax+seSl31OrsiIo8HMZdKYgFGAMt03yRq91r2VWBU3SAW/oNqbcb1Zji7v8ewK4WoKigJZwzmccSxodE0owT3awXEb0WUSmc0f8Kzx7zwU6fo64jDz4pzK5mvqlr0/MRoHHiNuWZAIpd9lcMTVmVVbyTgIVNTrB6eF9KvP3ibTu6Dq4bwHv8C/2UPNP98iz8rbMHQsEeFXUwB9D9TfC1khHtoPQpw1Ix188Pb5RY+kwWpxLjyOr8vti+uLj9chXK4QK7Bx3v6XQV2gZ+1Q7tJO0QptT9WuO4wH5ZRXOccuQVfzSTWFRgOVJwTIcpGtVKQhAjCtmKc9rai+WIp4IGfOf4wVe4kF5LHKHA2wqPF8siMiZZzjKS7/RMs3zvLaK1t91qrHyPybCEXpj89L6iutF/1cO5GNcrOVHEIAgdg6R9m/MrFOgAZ0RUTXUFeUa6gOZOAQPZYnIWjVs8lQoVOM4Q9t+pBISSr6NK0ShE2UaZUKVa33LYtEJlnGzijchcSc2jX0POgb9Fy0uAua9D7w3alRDih+y2yNKdIPGKfOlf36bYsZVTWixUbDmaCD+zYNosbz6Z6V9A List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------tKwgbBZ2fGxcx25ADlBtJa5d Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Here's a small patch re-introducing the option to use spread checkpoints (instead of always using CHECKPOINT_FAST) for online checksum changes. The version v20251201 posted in [1] supported this, but the next patch version was without checkpoints and so removed the "fast" parameter too. Then we realized the checkpoints are actually needed, but were added back to keep it as simple as possible. Or maybe it was an omission, not sure, and there's no explanation on the thread. I recall someone claiming always doing fast checkpoints is fine, because we've already written the whole database into WAL anyway, and on large databases that's likely way more expensive than a single checkpoint. I don't buy that, for two reasons: - We do have throttling for the rewrite phase, thanks to the cost_limit and cost_delay parameters. So we can effectively throttle it, to reduce impact of the checksums change. In which case the "fast" checkpoint can be way more disruptive. - We need to do checkpoints even when "disabling" checksums, in which case we don't rewrite any data pages (or WAL-log anything), we just need to persist the new checksum state. Which just makes the fast checkpoint relatively more disruptive. The attached patch is mostly extracted from v20251201, and adds the "fast" parameter back to pg_{enable,disable}_data_checksums. I have two open questions regarding it: 1) What should be the default? I've used fast=true, mostly because that's what PG19 is going to do (fast checkpoints by default). It's also somewhat consistent with e.g. VACUUM which does no throttling by default. But I assume most production uses would want fast=false? 2) I haven't adjusted the TAP tests. We could use fast=false in a couple of the test_checksums tests, but I'm not sure it's worth it and it makes it way more time consuming. We could reduce checkpoint_timeout to something very aggressive. And in fact that's what I did locally with the TAP tests I posted in [2]. But I'm still not convinced it's worth it - the checkpoints are still synchronous, of course. regards [1] https://www.postgresql.org/message-id/477897AE-1314-4724-9694-0BABC4F4ABDA%40yesql.se [2] https://www.postgresql.org/message-id/9e1331e1-93a0-4e27-934a-17b89342be4d%40vondra.me -- Tomas Vondra --------------tKwgbBZ2fGxcx25ADlBtJa5d Content-Type: text/x-patch; charset=UTF-8; name="0001-add-fast-parameter-to-enable-disable-checksums.patch" Content-Disposition: attachment; filename*0="0001-add-fast-parameter-to-enable-disable-checksums.patch" Content-Transfer-Encoding: base64 RnJvbSA0ZWJhN2JiYjczOWY1ZTdiOTVjNDkwOWQxY2VlMmE0MzdkOGM2ZWIzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB0ZXN0IDx0ZXN0PgpEYXRlOiBTdW4sIDMgTWF5IDIw MjYgMDA6NDA6MTcgKzAyMDAKU3ViamVjdDogW1BBVENIIDEvMl0gYWRkIGZhc3QgcGFyYW1l dGVyIHRvIGVuYWJsZS9kaXNhYmxlIGNoZWNrc3VtcwoKWFhYIFNob3VsZCB0aGlzIGRlZmF1 bHQgdG8gdHJ1ZSBvciBmYWxzZT8gTW9zdCBwcm9kdWN0aW9uIHN5c3RlbXMgd291bGQKcHJv YmFibHkgd2FudCAnZmFsc2UnIHRvIHJlZHVjZSBpbXBhY3QsIGJ1dCBQRzE5IGRvZXMgZmFz dCBjaGVja3BvaW50cwpieSBkZWZhdWx0LgotLS0KIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMt YWRtaW4uc2dtbCAgICAgICAgICAgfCAxNCArKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgICAgfCAyMyArKysrKysrKysrKysrKy0tLS0t LQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9kYXRhY2hlY2tzdW1fc3RhdGUuYyB8IDI0ICsr KysrKysrKysrKysrKy0tLS0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaCAgICAgICAg ICAgICAgICAgICB8ICA0ICsrLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg ICAgICAgICAgICAgfCAxMSArKysrKy0tLS0tCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Rh dGFjaGVja3N1bV9zdGF0ZS5oIHwgIDMgKystCiA2IGZpbGVzIGNoYW5nZWQsIDU2IGluc2Vy dGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9m dW5jL2Z1bmMtYWRtaW4uc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtYWRtaW4uc2dt bAppbmRleCAyNGVjYjQ2NTQyZS4uMDYzNjBlYTFiOTUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9mdW5jL2Z1bmMtYWRtaW4uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5j LWFkbWluLnNnbWwKQEAgLTMxNTgsNyArMzE1OCw3IEBAIFNFTEVDVCBjb252ZXJ0X2Zyb20o cGdfcmVhZF9iaW5hcnlfZmlsZSgnZmlsZV9pbl91dGY4LnR4dCcpLCAnVVRGOCcpOwogICAg ICAgICA8aW5kZXh0ZXJtPgogICAgICAgICAgPHByaW1hcnk+cGdfZW5hYmxlX2RhdGFfY2hl Y2tzdW1zPC9wcmltYXJ5PgogICAgICAgICA8L2luZGV4dGVybT4KLSAgICAgICAgPGZ1bmN0 aW9uPnBnX2VuYWJsZV9kYXRhX2NoZWNrc3VtczwvZnVuY3Rpb24+ICggPG9wdGlvbmFsPjxw YXJhbWV0ZXI+Y29zdF9kZWxheTwvcGFyYW1ldGVyPiA8dHlwZT5pbnQ8L3R5cGU+LCA8cGFy YW1ldGVyPmNvc3RfbGltaXQ8L3BhcmFtZXRlcj4gPHR5cGU+aW50PC90eXBlPjwvb3B0aW9u YWw+ICkKKyAgICAgICAgPGZ1bmN0aW9uPnBnX2VuYWJsZV9kYXRhX2NoZWNrc3VtczwvZnVu Y3Rpb24+ICggPG9wdGlvbmFsPjxwYXJhbWV0ZXI+Y29zdF9kZWxheTwvcGFyYW1ldGVyPiA8 dHlwZT5pbnQ8L3R5cGU+LCA8cGFyYW1ldGVyPmNvc3RfbGltaXQ8L3BhcmFtZXRlcj4gPHR5 cGU+aW50PC90eXBlPjwvb3B0aW9uYWw+LCA8cGFyYW1ldGVyPmZhc3Q8L3BhcmFtZXRlcj4g PHR5cGU+Ym9vbDwvdHlwZT48L29wdGlvbmFsPiApCiAgICAgICAgIDxyZXR1cm52YWx1ZT52 b2lkPC9yZXR1cm52YWx1ZT4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CkBAIC0z MTc1LDYgKzMxNzUsMTEgQEAgU0VMRUNUIGNvbnZlcnRfZnJvbShwZ19yZWFkX2JpbmFyeV9m aWxlKCdmaWxlX2luX3V0ZjgudHh0JyksICdVVEY4Jyk7CiAgICAgICAgIHNwZWNpZmllZCwg dGhlIHByb2Nlc3MgaXMgdGhyb3R0bGVkIHVzaW5nIHRoZSBzYW1lIHByaW5jaXBsZXMgYXMK ICAgICAgICAgPGxpbmsgbGlua2VuZD0icnVudGltZS1jb25maWctcmVzb3VyY2UtdmFjdXVt LWNvc3QiPkNvc3QtYmFzZWQgVmFjdXVtIERlbGF5PC9saW5rPi4KICAgICAgICA8L3BhcmE+ CisgICAgICAgPHBhcmE+CisgICAgICAgIElmIDxwYXJhbWV0ZXI+ZmFzdDwvcGFyYW1ldGVy PiBpcyBzcGVjaWZpZWQgYXMgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4KKyAgICAgICAgdGhl biBhIGZhc3QgY2hlY2twb2ludCB3aWxsIGJlIGlzc3VlZCB3aGVuIGRhdGEgY2hlY2tzdW1z IGhhdmUgYmVlbgorICAgICAgICBlbmFibGVkLCB3aGljaCBtYXkgY2F1c2UgYSBzcGlrZSBp biBJL08uCisgICAgICAgPC9wYXJhPgogICAgICAgIDwvZW50cnk+CiAgICAgICA8L3Jvdz4K IApAQCAtMzE4Myw3ICszMTg4LDcgQEAgU0VMRUNUIGNvbnZlcnRfZnJvbShwZ19yZWFkX2Jp bmFyeV9maWxlKCdmaWxlX2luX3V0ZjgudHh0JyksICdVVEY4Jyk7CiAgICAgICAgIDxpbmRl eHRlcm0+CiAgICAgICAgICA8cHJpbWFyeT5wZ19kaXNhYmxlX2RhdGFfY2hlY2tzdW1zPC9w cmltYXJ5PgogICAgICAgICA8L2luZGV4dGVybT4KLSAgICAgICAgPGZ1bmN0aW9uPnBnX2Rp c2FibGVfZGF0YV9jaGVja3N1bXM8L2Z1bmN0aW9uPiAoKQorICAgICAgICA8ZnVuY3Rpb24+ cGdfZGlzYWJsZV9kYXRhX2NoZWNrc3VtczwvZnVuY3Rpb24+ICggPG9wdGlvbmFsPjxwYXJh bWV0ZXI+ZmFzdDwvcGFyYW1ldGVyPiA8dHlwZT5ib29sPC90eXBlPjwvb3B0aW9uYWw+ICkK ICAgICAgICAgPHJldHVybnZhbHVlPnZvaWQ8L3JldHVybnZhbHVlPgogICAgICAgIDwvcGFy YT4KICAgICAgICA8cGFyYT4KQEAgLTMxOTMsNiArMzE5OCwxMSBAQCBTRUxFQ1QgY29udmVy dF9mcm9tKHBnX3JlYWRfYmluYXJ5X2ZpbGUoJ2ZpbGVfaW5fdXRmOC50eHQnKSwgJ1VURjgn KTsKICAgICAgICAgc3RvcHBlZCB2YWxpZGF0aW5nIGRhdGEgY2hlY2tzdW1zLCB0aGUgZGF0 YSBjaGVja3N1bSBzdGF0ZSB3aWxsIGJlCiAgICAgICAgIHNldCB0byA8bGl0ZXJhbD5vZmY8 L2xpdGVyYWw+LgogICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgSWYg PHBhcmFtZXRlcj5mYXN0PC9wYXJhbWV0ZXI+IGlzIHNwZWNpZmllZCBhcyA8bGl0ZXJhbD50 cnVlPC9saXRlcmFsPgorICAgICAgICB0aGVuIGEgZmFzdCBjaGVja3BvaW50IHdpbGwgYmUg aXNzdWVkIHdoZW4gZGF0YSBjaGVja3N1bXMgaGF2ZSBiZWVuCisgICAgICAgIGVuYWJsZWQs IHdoaWNoIG1heSBjYXVzZSBhIHNwaWtlIGluIEkvTy4KKyAgICAgICA8L3BhcmE+CiAgICAg ICAgPC9lbnRyeT4KICAgICAgIDwvcm93PgogICAgICA8L3Rib2R5PgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jCmluZGV4IDE4ZDVkZWUwNmUwLi42YjhiNDhmYTRjZSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtNDgwMyw5ICs0ODAzLDEwIEBAIFNldERh dGFDaGVja3N1bXNPbkluUHJvZ3Jlc3Modm9pZCkKICAqIHN0YXRlIHRyYW5zaXRpb24uCiAg Ki8KIHZvaWQKLVNldERhdGFDaGVja3N1bXNPbih2b2lkKQorU2V0RGF0YUNoZWNrc3Vtc09u KGJvb2wgZmFzdCkKIHsKIAl1aW50NjQJCWJhcnJpZXI7CisJaW50CQkJZmxhZ3M7CiAKIAlT cGluTG9ja0FjcXVpcmUoJlhMb2dDdGwtPmluZm9fbGNrKTsKIApAQCAtNDgyMCw3ICs0ODIx LDcgQEAgU2V0RGF0YUNoZWNrc3Vtc09uKHZvaWQpCiAJCVNwaW5Mb2NrUmVsZWFzZSgmWExv Z0N0bC0+aW5mb19sY2spOwogCQllbG9nKFdBUk5JTkcsCiAJCQkgImNhbm5vdCBzZXQgZGF0 YSBjaGVja3N1bXMgdG8gXCJvblwiLCBjdXJyZW50IHN0YXRlIGlzIG5vdCBcImlucHJvZ3Jl c3Mtb25cIiwgZGlzYWJsaW5nIik7Ci0JCVNldERhdGFDaGVja3N1bXNPZmYoKTsKKwkJU2V0 RGF0YUNoZWNrc3Vtc09mZihmYXN0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDg1MCw3ICs0 ODUxLDExIEBAIFNldERhdGFDaGVja3N1bXNPbih2b2lkKQogCU15UHJvYy0+ZGVsYXlDaGtw dEZsYWdzICY9IH5ERUxBWV9DSEtQVF9TVEFSVDsKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAK LQlSZXF1ZXN0Q2hlY2twb2ludChDSEVDS1BPSU5UX0ZPUkNFIHwgQ0hFQ0tQT0lOVF9XQUlU IHwgQ0hFQ0tQT0lOVF9GQVNUKTsKKwlmbGFncyA9IENIRUNLUE9JTlRfRk9SQ0UgfCBDSEVD S1BPSU5UX1dBSVQ7CisJaWYgKGZhc3QpCisJCWZsYWdzIHw9IENIRUNLUE9JTlRfRkFTVDsK KworCVJlcXVlc3RDaGVja3BvaW50KGZsYWdzKTsKIAlXYWl0Rm9yUHJvY1NpZ25hbEJhcnJp ZXIoYmFycmllcik7CiB9CiAKQEAgLTQ4NjgsOSArNDg3MywxNSBAQCBTZXREYXRhQ2hlY2tz dW1zT24odm9pZCkKICAqIHN0YXRlIHRyYW5zaXRpb24uCiAgKi8KIHZvaWQKLVNldERhdGFD aGVja3N1bXNPZmYodm9pZCkKK1NldERhdGFDaGVja3N1bXNPZmYoYm9vbCBmYXN0KQogewog CXVpbnQ2NAkJYmFycmllcjsKKwlpbnQJCQlmbGFnczsKKworCS8qIGRldGVybWluZSBmbGFn cyBmb3IgdGhlIGNoZWNrcG9pbnQocykgKi8KKwlmbGFncyA9IENIRUNLUE9JTlRfRk9SQ0Ug fCBDSEVDS1BPSU5UX1dBSVQ7CisJaWYgKGZhc3QpCisJCWZsYWdzIHw9IENIRUNLUE9JTlRf RkFTVDsKIAogCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ0N0bC0+aW5mb19sY2spOwogCkBAIC00 OTEyLDcgKzQ5MjMsNyBAQCBTZXREYXRhQ2hlY2tzdW1zT2ZmKHZvaWQpCiAJCU15UHJvYy0+ ZGVsYXlDaGtwdEZsYWdzICY9IH5ERUxBWV9DSEtQVF9TVEFSVDsKIAkJRU5EX0NSSVRfU0VD VElPTigpOwogCi0JCVJlcXVlc3RDaGVja3BvaW50KENIRUNLUE9JTlRfRk9SQ0UgfCBDSEVD S1BPSU5UX1dBSVQgfCBDSEVDS1BPSU5UX0ZBU1QpOworCQlSZXF1ZXN0Q2hlY2twb2ludChm bGFncyk7CiAJCVdhaXRGb3JQcm9jU2lnbmFsQmFycmllcihiYXJyaWVyKTsKIAogCQkvKgpA QCAtNDk1MCw3ICs0OTYxLDcgQEAgU2V0RGF0YUNoZWNrc3Vtc09mZih2b2lkKQogCU15UHJv Yy0+ZGVsYXlDaGtwdEZsYWdzICY9IH5ERUxBWV9DSEtQVF9TVEFSVDsKIAlFTkRfQ1JJVF9T RUNUSU9OKCk7CiAKLQlSZXF1ZXN0Q2hlY2twb2ludChDSEVDS1BPSU5UX0ZPUkNFIHwgQ0hF Q0tQT0lOVF9XQUlUIHwgQ0hFQ0tQT0lOVF9GQVNUKTsKKwlSZXF1ZXN0Q2hlY2twb2ludChm bGFncyk7CiAJV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKGJhcnJpZXIpOwogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2RhdGFjaGVja3N1bV9zdGF0ZS5jIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9kYXRhY2hlY2tzdW1fc3RhdGUuYwppbmRleCBkMGQ2 YWNkZDZhMi4uMjg2MDk2MjE3ZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvZGF0YWNoZWNrc3VtX3N0YXRlLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9k YXRhY2hlY2tzdW1fc3RhdGUuYwpAQCAtMjkxLDYgKzI5MSw3IEBAIHR5cGVkZWYgc3RydWN0 IERhdGFDaGVja3N1bXNTdGF0ZVN0cnVjdAogCURhdGFDaGVja3N1bXNXb3JrZXJPcGVyYXRp b24gbGF1bmNoX29wZXJhdGlvbjsKIAlpbnQJCQlsYXVuY2hfY29zdF9kZWxheTsKIAlpbnQJ CQlsYXVuY2hfY29zdF9saW1pdDsKKwlib29sCQlsYXVuY2hfZmFzdF9jaGVja3BvaW50Owog CiAJLyoKIAkgKiBJcyBhIGxhdW5jaGVyIHByb2Nlc3MgY3VycmVudGx5IHJ1bm5pbmc/ICBU aGlzIGlzIHNldCBieSB0aGUgbWFpbgpAQCAtMzE4LDYgKzMxOSw3IEBAIHR5cGVkZWYgc3Ry dWN0IERhdGFDaGVja3N1bXNTdGF0ZVN0cnVjdAogCURhdGFDaGVja3N1bXNXb3JrZXJPcGVy YXRpb24gb3BlcmF0aW9uOwogCWludAkJCWNvc3RfZGVsYXk7CiAJaW50CQkJY29zdF9saW1p dDsKKwlib29sCQlmYXN0X2NoZWNrcG9pbnQ7CiAKIAkvKgogCSAqIFNpZ25hbGluZyBiZXR3 ZWVuIHRoZSBsYXVuY2hlciBhbmQgdGhlIHdvcmtlciBwcm9jZXNzLgpAQCAtNTA5LDYgKzUx MSw4IEBAIEFic29yYkRhdGFDaGVja3N1bXNCYXJyaWVyKFByb2NTaWduYWxCYXJyaWVyVHlw ZSBiYXJyaWVyKQogRGF0dW0KIGRpc2FibGVfZGF0YV9jaGVja3N1bXMoUEdfRlVOQ1RJT05f QVJHUykKIHsKKwlib29sCQlmYXN0ID0gUEdfR0VUQVJHX0JPT0woMCk7CisKIAlQcmV2ZW50 Q29tbWFuZER1cmluZ1JlY292ZXJ5KCJwZ19kaXNhYmxlX2RhdGFfY2hlY2tzdW1zKCkiKTsK IAogCWlmICghc3VwZXJ1c2VyKCkpCkBAIC01MTYsNyArNTIwLDcgQEAgZGlzYWJsZV9kYXRh X2NoZWNrc3VtcyhQR19GVU5DVElPTl9BUkdTKQogCQkJCWVycmNvZGUoRVJSQ09ERV9JTlNV RkZJQ0lFTlRfUFJJVklMRUdFKSwKIAkJCQllcnJtc2coIm11c3QgYmUgc3VwZXJ1c2VyIHRv IGNoYW5nZSBkYXRhIGNoZWNrc3VtIHN0YXRlIikpOwogCi0JU3RhcnREYXRhQ2hlY2tzdW1z V29ya2VyTGF1bmNoZXIoRElTQUJMRV9EQVRBQ0hFQ0tTVU1TLCAwLCAwKTsKKwlTdGFydERh dGFDaGVja3N1bXNXb3JrZXJMYXVuY2hlcihESVNBQkxFX0RBVEFDSEVDS1NVTVMsIDAsIDAs IGZhc3QpOwogCVBHX1JFVFVSTl9WT0lEKCk7CiB9CiAKQEAgLTUzMCw2ICs1MzQsNyBAQCBl bmFibGVfZGF0YV9jaGVja3N1bXMoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlpbnQJCQljb3N0 X2RlbGF5ID0gUEdfR0VUQVJHX0lOVDMyKDApOwogCWludAkJCWNvc3RfbGltaXQgPSBQR19H RVRBUkdfSU5UMzIoMSk7CisJYm9vbAkJZmFzdCA9IFBHX0dFVEFSR19CT09MKDIpOwogCiAJ UHJldmVudENvbW1hbmREdXJpbmdSZWNvdmVyeSgicGdfZW5hYmxlX2RhdGFfY2hlY2tzdW1z KCkiKTsKIApAQCAtNTQ4LDcgKzU1Myw3IEBAIGVuYWJsZV9kYXRhX2NoZWNrc3VtcyhQR19G VU5DVElPTl9BUkdTKQogCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCiAJCQkJZXJybXNnKCJjb3N0IGxpbWl0IG11c3QgYmUgZ3JlYXRlciB0aGFuIHpl cm8iKSk7CiAKLQlTdGFydERhdGFDaGVja3N1bXNXb3JrZXJMYXVuY2hlcihFTkFCTEVfREFU QUNIRUNLU1VNUywgY29zdF9kZWxheSwgY29zdF9saW1pdCk7CisJU3RhcnREYXRhQ2hlY2tz dW1zV29ya2VyTGF1bmNoZXIoRU5BQkxFX0RBVEFDSEVDS1NVTVMsIGNvc3RfZGVsYXksIGNv c3RfbGltaXQsIGZhc3QpOwogCiAJUEdfUkVUVVJOX1ZPSUQoKTsKIH0KQEAgLTU2OCw3ICs1 NzMsOCBAQCBlbmFibGVfZGF0YV9jaGVja3N1bXMoUEdfRlVOQ1RJT05fQVJHUykKIHZvaWQK IFN0YXJ0RGF0YUNoZWNrc3Vtc1dvcmtlckxhdW5jaGVyKERhdGFDaGVja3N1bXNXb3JrZXJP cGVyYXRpb24gb3AsCiAJCQkJCQkJCSBpbnQgY29zdF9kZWxheSwKLQkJCQkJCQkJIGludCBj b3N0X2xpbWl0KQorCQkJCQkJCQkgaW50IGNvc3RfbGltaXQsCisJCQkJCQkJCSBib29sIGZh c3QpCiB7CiAJQmFja2dyb3VuZFdvcmtlciBiZ3c7CiAJQmFja2dyb3VuZFdvcmtlckhhbmRs ZSAqYmd3X2hhbmRsZTsKQEAgLTU4OCw2ICs1OTQsNyBAQCBTdGFydERhdGFDaGVja3N1bXNX b3JrZXJMYXVuY2hlcihEYXRhQ2hlY2tzdW1zV29ya2VyT3BlcmF0aW9uIG9wLAogCURhdGFD aGVja3N1bVN0YXRlLT5sYXVuY2hfb3BlcmF0aW9uID0gb3A7CiAJRGF0YUNoZWNrc3VtU3Rh dGUtPmxhdW5jaF9jb3N0X2RlbGF5ID0gY29zdF9kZWxheTsKIAlEYXRhQ2hlY2tzdW1TdGF0 ZS0+bGF1bmNoX2Nvc3RfbGltaXQgPSBjb3N0X2xpbWl0OworCURhdGFDaGVja3N1bVN0YXRl LT5sYXVuY2hfZmFzdF9jaGVja3BvaW50ID0gZmFzdDsKIAogCS8qIElzIHRoZSBsYXVuY2hl ciBhbHJlYWR5IHJ1bm5pbmc/IElmIHNvLCB3aGF0IGlzIGl0IGRvaW5nPyAqLwogCXJ1bm5p bmcgPSBEYXRhQ2hlY2tzdW1TdGF0ZS0+bGF1bmNoZXJfcnVubmluZzsKQEAgLTkzOCw3ICs5 NDUsNyBAQCBsYXVuY2hlcl9leGl0KGludCBjb2RlLCBEYXR1bSBhcmcpCiAJICogdGhlIHN0 YXRlIHRvIG9mZiBzaW5jZSBwcm9jZXNzaW5nIGNhbm5vdCBiZSByZXN1bWVkLgogCSAqLwog CWlmIChEYXRhQ2hlY2tzdW1zSW5Qcm9ncmVzc09uKCkpCi0JCVNldERhdGFDaGVja3N1bXNP ZmYoKTsKKwkJU2V0RGF0YUNoZWNrc3Vtc09mZihEYXRhQ2hlY2tzdW1TdGF0ZS0+ZmFzdF9j aGVja3BvaW50KTsKIAogCUxXTG9ja0FjcXVpcmUoRGF0YUNoZWNrc3Vtc1dvcmtlckxvY2ss IExXX0VYQ0xVU0lWRSk7CiAJbGF1bmNoZXJfcnVubmluZyA9IGZhbHNlOwpAQCAtMTA4MSw2 ICsxMDg4LDcgQEAgRGF0YUNoZWNrc3Vtc1dvcmtlckxhdW5jaGVyTWFpbihEYXR1bSBhcmcp CiAJRGF0YUNoZWNrc3VtU3RhdGUtPm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKIAlEYXRhQ2hl Y2tzdW1TdGF0ZS0+Y29zdF9kZWxheSA9IERhdGFDaGVja3N1bVN0YXRlLT5sYXVuY2hfY29z dF9kZWxheTsKIAlEYXRhQ2hlY2tzdW1TdGF0ZS0+Y29zdF9saW1pdCA9IERhdGFDaGVja3N1 bVN0YXRlLT5sYXVuY2hfY29zdF9saW1pdDsKKwlEYXRhQ2hlY2tzdW1TdGF0ZS0+ZmFzdF9j aGVja3BvaW50ID0gRGF0YUNoZWNrc3VtU3RhdGUtPmxhdW5jaF9mYXN0X2NoZWNrcG9pbnQ7 CiAJTFdMb2NrUmVsZWFzZShEYXRhQ2hlY2tzdW1zV29ya2VyTG9jayk7CiAKIAkvKgpAQCAt MTEzOSw3ICsxMTQ3LDcgQEAgYWdhaW46CiAJCSAqIERhdGEgY2hlY2tzdW1zIGhhdmUgYmVl biBzZXQgb24gYWxsIHBhZ2VzLCBzZXQgdGhlIHN0YXRlIHRvIG9uIGluCiAJCSAqIG9yZGVy IHRvIGluc3RydWN0IGJhY2tlbmRzIHRvIHZhbGlkYXRlIGNoZWNrc3VtcyBvbiByZWFkaW5n LgogCQkgKi8KLQkJU2V0RGF0YUNoZWNrc3Vtc09uKCk7CisJCVNldERhdGFDaGVja3N1bXNP bihEYXRhQ2hlY2tzdW1TdGF0ZS0+ZmFzdF9jaGVja3BvaW50KTsKIAogCQllcmVwb3J0KExP RywKIAkJCQllcnJtc2coImRhdGEgY2hlY2tzdW1zIGFyZSBub3cgZW5hYmxlZCIpKTsKQEAg LTExNTEsNyArMTE1OSw3IEBAIGFnYWluOgogCiAJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVf cGFyYW0oUFJPR1JFU1NfREFUQUNIRUNLU1VNU19QSEFTRSwKIAkJCQkJCQkJCSBQUk9HUkVT U19EQVRBQ0hFQ0tTVU1TX1BIQVNFX0RJU0FCTElORyk7Ci0JCVNldERhdGFDaGVja3N1bXNP ZmYoKTsKKwkJU2V0RGF0YUNoZWNrc3Vtc09mZihEYXRhQ2hlY2tzdW1TdGF0ZS0+ZmFzdF9j aGVja3BvaW50KTsKIAkJZXJlcG9ydChMT0csCiAJCQkJZXJybXNnKCJkYXRhIGNoZWNrc3Vt cyBhcmUgbm93IGRpc2FibGVkIikpOwogCX0KQEAgLTExNzksNiArMTE4Nyw3IEBAIGRvbmU6 CiAJCW9wZXJhdGlvbiA9IERhdGFDaGVja3N1bVN0YXRlLT5sYXVuY2hfb3BlcmF0aW9uOwog CQlEYXRhQ2hlY2tzdW1TdGF0ZS0+Y29zdF9kZWxheSA9IERhdGFDaGVja3N1bVN0YXRlLT5s YXVuY2hfY29zdF9kZWxheTsKIAkJRGF0YUNoZWNrc3VtU3RhdGUtPmNvc3RfbGltaXQgPSBE YXRhQ2hlY2tzdW1TdGF0ZS0+bGF1bmNoX2Nvc3RfbGltaXQ7CisJCURhdGFDaGVja3N1bVN0 YXRlLT5mYXN0X2NoZWNrcG9pbnQgPSBEYXRhQ2hlY2tzdW1TdGF0ZS0+bGF1bmNoX2Zhc3Rf Y2hlY2twb2ludDsKIAkJTFdMb2NrUmVsZWFzZShEYXRhQ2hlY2tzdW1zV29ya2VyTG9jayk7 CiAJCWdvdG8gYWdhaW47CiAJfQpAQCAtMTI2OCw3ICsxMjc3LDcgQEAgUHJvY2Vzc0FsbERh dGFiYXNlcyh2b2lkKQogCQkJICogRGlzYWJsZSBjaGVja3N1bXMgb24gY2x1c3RlciwgYmVj YXVzZSB3ZSBmYWlsZWQgb25lIG9mIHRoZQogCQkJICogZGF0YWJhc2VzIGFuZCB0aGlzIGlz IGFuIGFsbCBvciBub3RoaW5nIHByb2Nlc3MuCiAJCQkgKi8KLQkJCVNldERhdGFDaGVja3N1 bXNPZmYoKTsKKwkJCVNldERhdGFDaGVja3N1bXNPZmYoRGF0YUNoZWNrc3VtU3RhdGUtPmZh c3RfY2hlY2twb2ludCk7CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQllcnJjb2RlKEVSUkNP REVfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyksCiAJCQkJCWVycm1zZygiZGF0YSBjaGVja3N1 bXMgZmFpbGVkIHRvIGdldCBlbmFibGVkIGluIGFsbCBkYXRhYmFzZXMsIGFib3J0aW5nIiks CkBAIC0xNjA2LDYgKzE2MTUsNyBAQCBEYXRhQ2hlY2tzdW1zV29ya2VyTWFpbihEYXR1bSBh cmcpCiAKIAkJCURhdGFDaGVja3N1bVN0YXRlLT5jb3N0X2RlbGF5ID0gRGF0YUNoZWNrc3Vt U3RhdGUtPmxhdW5jaF9jb3N0X2RlbGF5OwogCQkJRGF0YUNoZWNrc3VtU3RhdGUtPmNvc3Rf bGltaXQgPSBEYXRhQ2hlY2tzdW1TdGF0ZS0+bGF1bmNoX2Nvc3RfbGltaXQ7CisJCQlEYXRh Q2hlY2tzdW1TdGF0ZS0+ZmFzdF9jaGVja3BvaW50ID0gRGF0YUNoZWNrc3VtU3RhdGUtPmxh dW5jaF9mYXN0X2NoZWNrcG9pbnQ7CiAJCX0KIAkJZWxzZQogCQkJY29zdHNfdXBkYXRlZCA9 IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy94bG9nLmgKaW5kZXggNGRkOTg2MjQyMDQuLjhhOWU4OTYxYTZhIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy94bG9nLmgKQEAgLTI1Myw4ICsyNTMsOCBAQCBleHRlcm4gYm9vbCBEYXRhQ2hl Y2tzdW1zT24odm9pZCk7CiBleHRlcm4gYm9vbCBEYXRhQ2hlY2tzdW1zT2ZmKHZvaWQpOwog ZXh0ZXJuIGJvb2wgRGF0YUNoZWNrc3Vtc0luUHJvZ3Jlc3NPbih2b2lkKTsKIGV4dGVybiB2 b2lkIFNldERhdGFDaGVja3N1bXNPbkluUHJvZ3Jlc3Modm9pZCk7Ci1leHRlcm4gdm9pZCBT ZXREYXRhQ2hlY2tzdW1zT24odm9pZCk7Ci1leHRlcm4gdm9pZCBTZXREYXRhQ2hlY2tzdW1z T2ZmKHZvaWQpOworZXh0ZXJuIHZvaWQgU2V0RGF0YUNoZWNrc3Vtc09uKGJvb2wgZmFzdCk7 CitleHRlcm4gdm9pZCBTZXREYXRhQ2hlY2tzdW1zT2ZmKGJvb2wgZmFzdCk7CiBleHRlcm4g Y29uc3QgY2hhciAqc2hvd19kYXRhX2NoZWNrc3Vtcyh2b2lkKTsKIGV4dGVybiBjb25zdCBj aGFyICpnZXRfY2hlY2tzdW1fc3RhdGVfc3RyaW5nKHVpbnQzMiBzdGF0ZSk7CiBleHRlcm4g dm9pZCBJbml0TG9jYWxEYXRhQ2hlY2tzdW1TdGF0ZSh2b2lkKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CmluZGV4IGZhOWFlNzkwODJiLi5mZWQ1ZmJhNGMwYyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CkBAIC0xMjQ1NywxNCArMTI0NTcsMTUgQEAKIHsgb2lkID0+ICc5 MjU4JywKICAgZGVzY3IgPT4gJ2Rpc2FibGUgZGF0YSBjaGVja3N1bXMnLAogICBwcm9uYW1l ID0+ICdwZ19kaXNhYmxlX2RhdGFfY2hlY2tzdW1zJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBw cm9yZXR0eXBlID0+ICd2b2lkJywKLSAgcHJvcGFyYWxsZWwgPT4gJ3InLCBwcm9zcmMgPT4g J2Rpc2FibGVfZGF0YV9jaGVja3N1bXMnLCBwcm9hcmd0eXBlcyA9PiAnJywKLSAgcHJvYWNs ID0+ICd7UE9TVEdSRVM9WH0nfSwKKyAgcHJvcGFyYWxsZWwgPT4gJ3InLCBwcm9zcmMgPT4g J2Rpc2FibGVfZGF0YV9jaGVja3N1bXMnLCBwcm9hcmd0eXBlcyA9PiAnYm9vbCcsCisgIHBy b2FsbGFyZ3R5cGVzID0+ICd7Ym9vbH0nLCBwcm9hcmdtb2RlcyA9PiAne2l9JywgcHJvYXJn bmFtZXMgPT4gJ3tmYXN0fScsCisgIHByb2FyZ2RlZmF1bHRzID0+ICd7dHJ1ZX0nLCBwcm9h Y2wgPT4gJ3tQT1NUR1JFUz1YfSd9LAogeyBvaWQgPT4gJzkyNTcnLAogICBkZXNjciA9PiAn ZW5hYmxlIGRhdGEgY2hlY2tzdW1zJywKICAgcHJvbmFtZSA9PiAncGdfZW5hYmxlX2RhdGFf Y2hlY2tzdW1zJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9yZXR0eXBlID0+ICd2b2lkJywK LSAgcHJvcGFyYWxsZWwgPT4gJ3InLCBwcm9hcmd0eXBlcyA9PiAnaW50NCBpbnQ0JywgcHJv YWxsYXJndHlwZXMgPT4gJ3tpbnQ0LGludDR9JywKLSAgcHJvYXJnbW9kZXMgPT4gJ3tpLGl9 JywgcHJvYXJnbmFtZXMgPT4gJ3tjb3N0X2RlbGF5LGNvc3RfbGltaXR9JywKLSAgcHJvYXJn ZGVmYXVsdHMgPT4gJ3swLDEwMH0nLCBwcm9zcmMgPT4gJ2VuYWJsZV9kYXRhX2NoZWNrc3Vt cycsCisgIHByb3BhcmFsbGVsID0+ICdyJywgcHJvYXJndHlwZXMgPT4gJ2ludDQgaW50NCBi b29sJywgcHJvYWxsYXJndHlwZXMgPT4gJ3tpbnQ0LGludDQsYm9vbH0nLAorICBwcm9hcmdt b2RlcyA9PiAne2ksaSxpfScsIHByb2FyZ25hbWVzID0+ICd7Y29zdF9kZWxheSxjb3N0X2xp bWl0LGZhc3R9JywKKyAgcHJvYXJnZGVmYXVsdHMgPT4gJ3swLDEwMCx0cnVlfScsIHByb3Ny YyA9PiAnZW5hYmxlX2RhdGFfY2hlY2tzdW1zJywKICAgcHJvYWNsID0+ICd7UE9TVEdSRVM9 WH0nfSwKIAogIyBjb2xsYXRpb24gbWFuYWdlbWVudCBmdW5jdGlvbnMKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvZGF0YWNoZWNrc3VtX3N0YXRlLmggYi9zcmMvaW5j bHVkZS9wb3N0bWFzdGVyL2RhdGFjaGVja3N1bV9zdGF0ZS5oCmluZGV4IDJhMWFlMTBkNTVk Li42YmQ5NzVjMDY3MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9kYXRh Y2hlY2tzdW1fc3RhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2RhdGFjaGVj a3N1bV9zdGF0ZS5oCkBAIC00NSw3ICs0NSw4IEBAIHZvaWQJCUVtaXRBbmRXYWl0RGF0YUNo ZWNrc3Vtc0JhcnJpZXIodWludDMyIHN0YXRlKTsKIC8qIFN0YXJ0IHRoZSBiYWNrZ3JvdW5k IHByb2Nlc3NlcyBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGNoZWNrc3VtcyAqLwogdm9p ZAkJU3RhcnREYXRhQ2hlY2tzdW1zV29ya2VyTGF1bmNoZXIoRGF0YUNoZWNrc3Vtc1dvcmtl ck9wZXJhdGlvbiBvcCwKIAkJCQkJCQkJCQkJIGludCBjb3N0X2RlbGF5LAotCQkJCQkJCQkJ CQkgaW50IGNvc3RfbGltaXQpOworCQkJCQkJCQkJCQkgaW50IGNvc3RfbGltaXQsCisJCQkJ CQkJCQkJCSBib29sIGZhc3QpOwogCiAvKiBCYWNrZ3JvdW5kIHdvcmtlciBlbnRyeXBvaW50 cyAqLwogdm9pZAkJRGF0YUNoZWNrc3Vtc1dvcmtlckxhdW5jaGVyTWFpbihEYXR1bSBhcmcp OwotLSAKMi41NC4wCgo= --------------tKwgbBZ2fGxcx25ADlBtJa5d--