Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1npGL3-0001g4-8L for pgsql-hackers@arkaria.postgresql.org; Thu, 12 May 2022 21:27:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1npGL2-0007LR-3U for pgsql-hackers@arkaria.postgresql.org; Thu, 12 May 2022 21:27:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1npGL1-0007LH-2h for pgsql-hackers@lists.postgresql.org; Thu, 12 May 2022 21:27:11 +0000 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1npGKt-0000el-Ph for pgsql-hackers@postgresql.org; Thu, 12 May 2022 21:27:09 +0000 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-ee1e7362caso8250273fac.10 for ; Thu, 12 May 2022 14:27:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=HfTjt/tUOh0YhkfTlS9dg5RIXJbX7jhOu0DGY95FKCw=; b=YvfvC0RC3NtXHvZP9UBE+Qk8ba97adbhUwI/UuD486PQKhekMya/Xo5ZuuRcdr/KR2 YD7ePp1iESguiLKgk+u5XsMqmge76xy7oMt5KphS3mYH8u11VuuMkFlf7/iolsheBeV0 cBbPjIkizjV5lqRHWqXiulZQ0wFDKCu1AIEH4II9Q40ujQ2HfI3a+dFS/3s6CrOqpMeu UKG82nQRbFByxnwoyWyx99CqXLA6/dZwTxv8Mx7JMvBV2BzaTWBZ2cRtWmYTiOJbR1CZ TFZRvfUX9UBxUqiVLdZ1HVtr0oSKe2WGIFvIpYVFbhu7tHLWqB5B8blUB/LlACtsw7Ja QdmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=HfTjt/tUOh0YhkfTlS9dg5RIXJbX7jhOu0DGY95FKCw=; b=oEE3xrK2bnsUYoEgKVbI9nfgGlmMUhXQF0Gpva8RUtdvxGAU9HJMF0oSYUCt424bCw jr98jd7M3ehUn+4qatNBn153Kz39drKLT7zLaufreABEs6IkT4Iaub6CG6b20qL72gQW EcQWnDl5RAJM/y11ujqap0GwT59/RW77W71j921htHP4rH/A9K6QReokOKyxgTkIyhe5 OraPPyg+w/mzwF/LAPODdKddG3fVhCo9PdocNj5d+VgGcRTg09cOX97YSM3HQnxoXcv2 scju22eKydPv3iAZTPxO1qMsbxBEAGC7UhHzkvSuLvPiPNJZHCwVey97H7pQDpEQpnjE 0tYg== X-Gm-Message-State: AOAM533iVSz2yCjSoHhPRXIY3ywPp6+mG3VnzLdKzZ4Rvy7zchjb76AY ZD/0uaeQThuHmqj4Q18fmDuYVVVP5BOQZrsQFLKfhr3YXzrAtybvQA4hAsWFsRSBJGVHuyK6eHA 3Y2IOzFCmq2Z3zQdujReVMUZcU3rfut1pyHVL92NR+6qlVVkCGf6LwcBjt0x7a45UbAId+DTGuI ka3Qp7aKm8BbqAdfnfkLUfzwDQKEjrMn1zoMNGMUjXAels5e1kF4X+4Voq9w== X-Google-Smtp-Source: ABdhPJyjLTWY1keJ2MYOjLX+UxZ1myTRwpwrwYzrpViDfNAhumLn1iJUG7aDO32AbBz3NhFrA/NJw+v5jRpGjP0Aous= X-Received: by 2002:a05:6870:d683:b0:de:eaa2:3550 with SMTP id z3-20020a056870d68300b000deeaa23550mr1016615oap.253.1652390822812; Thu, 12 May 2022 14:27:02 -0700 (PDT) MIME-Version: 1.0 References: <20220512034010.4oqa76pasrulkw32@alap3.anarazel.de> In-Reply-To: <20220512034010.4oqa76pasrulkw32@alap3.anarazel.de> From: Simon Riggs Date: Thu, 12 May 2022 22:26:51 +0100 Message-ID: Subject: Re: Comments on Custom RMGRs To: Andres Freund Cc: Jeff Davis , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000006514405ded738bd" X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000006514405ded738bd Content-Type: text/plain; charset="UTF-8" On Thu, 12 May 2022 at 04:40, Andres Freund wrote: > > On 2022-05-11 09:39:48 -0700, Jeff Davis wrote: > > On Wed, 2022-05-11 at 15:24 +0100, Simon Riggs wrote: > > > [PATCH: rmgr_001.v1.patch] > > > > > > [PATCH: rmgr_002.v1.patch] > > > > Thank you. Both of these look like good ideas, and I will commit them > > in a few days assuming that nobody else sees a problem. > > What exactly is the use case here? Without passing in information about > whether recovery will be performed etc, it's not at all clear how callbacks > could something useful? Sure, happy to do it that way. [PATCH: rmgr_002.v2.patch] > I don't think we should allocate a bunch of memory contexts to just free them > immediately after? Didn't seem a problem, but I've added code to use the flag requested above. > > > It occurs to me that any use of WAL presumes that Checkpoints exist > > > and do something useful. However, the custom rmgr interface doesn't > > > allow you to specify any actions on checkpoint, so ends up being > > > limited in scope. So I think we also need an rm_checkpoint() call - > > > which would be a no-op for existing rmgrs. > > > [PATCH: rmgr_003.v1.patch] > > > > I also like this idea, but can you describe the intended use case? I > > looked through CheckPointGuts() and I'm not sure what else a custom AM > > might want to do. Maybe sync special files in a way that's not handled > > with RegisterSyncRequest()? > > I'm not happy with the idea of random code being executed in the middle of > CheckPointGuts(), without any documentation of what is legal to do at that > point. The "I'm not happy.." ship has already sailed with pluggable rmgrs. Checkpoints exist for one purpose - as the starting place for recovery. Why would we allow pluggable recovery without *also* allowing pluggable checkpoints? >To actually be useful we'd likely need multiple calls to such an rmgr > callback, with a parameter where in CheckPointGuts() we are. Right now the > sequencing is explicit in CheckPointGuts(), but with the proposed callback, > that'd not be the case anymore. It is useful without the extra complexity you mention. I see multiple uses for the rm_checkpoint() point proposed and I've been asked multiple times for a checkpoint hook. Any rmgr that services crash recovery for a non-smgr based storage system would need this because the current checkpoint code only handles flushing to disk for smgr-based approaches. That is orthogonal to other code during checkpoint, so it stands alone quite well. -- Simon Riggs http://www.EnterpriseDB.com/ --00000000000006514405ded738bd Content-Type: application/octet-stream; name="rmgr_002.v2.patch" Content-Disposition: attachment; filename="rmgr_002.v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l33isx260 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2lueGxvZy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW54bG9nLmMKaW5kZXggODdlODM2NjY0Mi4uNTNkNjIyMjc3NSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW54bG9nLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW54bG9nLmMKQEAgLTc3MiwxNiArNzcyLDIwIEBAIGdpbl9yZWRvKFhM b2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogfQogCiB2b2lkCi1naW5feGxvZ19zdGFydHVwKHZvaWQp CitnaW5feGxvZ19zdGFydHVwKGJvb2wgaW5fcmVkbykKIHsKKwlpZiAoIWluX3JlZG8pCisJCXJl dHVybjsKIAlvcEN0eCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4 dCwKIAkJCQkJCQkJICAiR0lOIHJlY292ZXJ5IHRlbXBvcmFyeSBjb250ZXh0IiwKIAkJCQkJCQkJ ICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKIH0KIAogdm9pZAotZ2luX3hsb2dfY2xlYW51cCh2 b2lkKQorZ2luX3hsb2dfY2xlYW51cChib29sIGluX3JlZG8pCiB7CisJaWYgKCFpbl9yZWRvKQor CQlyZXR1cm47CiAJTWVtb3J5Q29udGV4dERlbGV0ZShvcEN0eCk7CiAJb3BDdHggPSBOVUxMOwog fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R4bG9nLmMKaW5kZXggZGY3MGY5MDZiNC4uNDk2ODExMDlm MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jCkBAIC00NDAsMTQgKzQ0MCwxOCBAQCBn aXN0X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiB9CiAKIHZvaWQKLWdpc3RfeGxvZ19z dGFydHVwKHZvaWQpCitnaXN0X3hsb2dfc3RhcnR1cChib29sIGluX3JlZG8pCiB7CisJaWYgKCFp bl9yZWRvKQorCQlyZXR1cm47CiAJb3BDdHggPSBjcmVhdGVUZW1wR2lzdENvbnRleHQoKTsKIH0K IAogdm9pZAotZ2lzdF94bG9nX2NsZWFudXAodm9pZCkKK2dpc3RfeGxvZ19jbGVhbnVwKGJvb2wg aW5fcmVkbykKIHsKKwlpZiAoIWluX3JlZG8pCisJCXJldHVybjsKIAlNZW1vcnlDb250ZXh0RGVs ZXRlKG9wQ3R4KTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnR4bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYwppbmRleCBmOTE4 NmNhMjMzLi5hMGM1YzZjNGZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHhsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYwpAQCAt MTA2OSwxNiArMTA2OSwyMCBAQCBidHJlZV9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQog fQogCiB2b2lkCi1idHJlZV94bG9nX3N0YXJ0dXAodm9pZCkKK2J0cmVlX3hsb2dfc3RhcnR1cChi b29sIGluX3JlZG8pCiB7CisJaWYgKCFpbl9yZWRvKQorCQlyZXR1cm47CiAJb3BDdHggPSBBbGxv Y1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCiAJCQkJCQkJCSAgIkJ0cmVl IHJlY292ZXJ5IHRlbXBvcmFyeSBjb250ZXh0IiwKIAkJCQkJCQkJICBBTExPQ1NFVF9ERUZBVUxU X1NJWkVTKTsKIH0KIAogdm9pZAotYnRyZWVfeGxvZ19jbGVhbnVwKHZvaWQpCitidHJlZV94bG9n X2NsZWFudXAoYm9vbCBpbl9yZWRvKQogeworCWlmICghaW5fcmVkbykKKwkJcmV0dXJuOwogCU1l bW9yeUNvbnRleHREZWxldGUob3BDdHgpOwogCW9wQ3R4ID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BneGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3NwZ2lzdC9zcGd4bG9nLmMKaW5kZXggYjUwMGIyY2NlZC4uM2U0ZTZlYzkzOSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd4bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3NwZ2lzdC9zcGd4bG9nLmMKQEAgLTk3NywxNiArOTc3LDIwIEBAIHNwZ19yZWRvKFhM b2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogfQogCiB2b2lkCi1zcGdfeGxvZ19zdGFydHVwKHZvaWQp CitzcGdfeGxvZ19zdGFydHVwKGJvb2wgaW5fcmVkbykKIHsKKwlpZiAoIWluX3JlZG8pCisJCXJl dHVybjsKIAlvcEN0eCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4 dCwKIAkJCQkJCQkJICAiU1AtR2lTVCB0ZW1wb3JhcnkgY29udGV4dCIsCiAJCQkJCQkJCSAgQUxM T0NTRVRfREVGQVVMVF9TSVpFUyk7CiB9CiAKIHZvaWQKLXNwZ194bG9nX2NsZWFudXAodm9pZCkK K3NwZ194bG9nX2NsZWFudXAoYm9vbCBpbl9yZWRvKQogeworCWlmICghaW5fcmVkbykKKwkJcmV0 dXJuOwogCU1lbW9yeUNvbnRleHREZWxldGUob3BDdHgpOwogCW9wQ3R4ID0gTlVMTDsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwppbmRleCBlMWQ2ZWJiZDNkLi5kZGQ5ZTA0ZmRiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jCkBAIC00Niw3ICs0Niw3IEBAIFJtZ3JEYXRhIFJtZ3JU YWJsZVtSTV9NQVhfSUQgKyAxXSA9IHsKICAqIFN0YXJ0IHVwIGFsbCByZXNvdXJjZSBtYW5hZ2Vy cy4KICAqLwogdm9pZAotUm1nclN0YXJ0dXAodm9pZCkKK1JtZ3JTdGFydHVwKGJvb2wgaW5fcmVk bykKIHsKIAlmb3IgKGludCBybWlkID0gMDsgcm1pZCA8PSBSTV9NQVhfSUQ7IHJtaWQrKykKIAl7 CkBAIC01NCw3ICs1NCw3IEBAIFJtZ3JTdGFydHVwKHZvaWQpCiAJCQljb250aW51ZTsKIAogCQlp ZiAoUm1nclRhYmxlW3JtaWRdLnJtX3N0YXJ0dXAgIT0gTlVMTCkKLQkJCVJtZ3JUYWJsZVtybWlk XS5ybV9zdGFydHVwKCk7CisJCQlSbWdyVGFibGVbcm1pZF0ucm1fc3RhcnR1cChpbl9yZWRvKTsK IAl9CiB9CiAKQEAgLTYyLDcgKzYyLDcgQEAgUm1nclN0YXJ0dXAodm9pZCkKICAqIENsZWFuIHVw IGFsbCByZXNvdXJjZSBtYW5hZ2Vycy4KICAqLwogdm9pZAotUm1nckNsZWFudXAodm9pZCkKK1Jt Z3JDbGVhbnVwKGJvb2wgaW5fcmVkbykKIHsKIAlmb3IgKGludCBybWlkID0gMDsgcm1pZCA8PSBS TV9NQVhfSUQ7IHJtaWQrKykKIAl7CkBAIC03MCw3ICs3MCw3IEBAIFJtZ3JDbGVhbnVwKHZvaWQp CiAJCQljb250aW51ZTsKIAogCQlpZiAoUm1nclRhYmxlW3JtaWRdLnJtX2NsZWFudXAgIT0gTlVM TCkKLQkJCVJtZ3JUYWJsZVtybWlkXS5ybV9jbGVhbnVwKCk7CisJCQlSbWdyVGFibGVbcm1pZF0u cm1fY2xlYW51cChpbl9yZWRvKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZ3JlY292ZXJ5LmMKaW5kZXggMzllZjg2NWVkOS4uMDA4YjQzOWRkNiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKQEAgLTE2MjYsMTYgKzE2MjYsMTcgQEAg UGVyZm9ybVdhbFJlY292ZXJ5KHZvaWQpCiAJfQogCiAJaWYgKHJlY29yZCAhPSBOVUxMKQorCQlJ blJlZG8gPSB0cnVlOworCisJUm1nclN0YXJ0dXAoSW5SZWRvKTsKKworCWlmIChJblJlZG8pCiAJ ewogCQlUaW1lc3RhbXBUeiB4dGltZTsKIAkJUEdSVXNhZ2UJcnUwOwogCiAJCXBnX3J1c2FnZV9p bml0KCZydTApOwogCi0JCUluUmVkbyA9IHRydWU7Ci0KLQkJUm1nclN0YXJ0dXAoKTsKLQogCQll cmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCJyZWRvIHN0YXJ0cyBhdCAlWC8lWCIsCiAJCQkJCQlM U05fRk9STUFUX0FSR1MoeGxvZ3JlYWRlci0+UmVhZFJlY1B0cikpKSk7CkBAIC0xNzcxLDggKzE3 NzIsNiBAQCBQZXJmb3JtV2FsUmVjb3Zlcnkodm9pZCkKIAkJCX0KIAkJfQogCi0JCVJtZ3JDbGVh bnVwKCk7Ci0KIAkJZXJlcG9ydChMT0csCiAJCQkJKGVycm1zZygicmVkbyBkb25lIGF0ICVYLyVY IHN5c3RlbSB1c2FnZTogJXMiLAogCQkJCQkJTFNOX0ZPUk1BVF9BUkdTKHhsb2dyZWFkZXItPlJl YWRSZWNQdHIpLApAQCAtMTc4Miw4ICsxNzgxLDYgQEAgUGVyZm9ybVdhbFJlY292ZXJ5KHZvaWQp CiAJCQllcmVwb3J0KExPRywKIAkJCQkJKGVycm1zZygibGFzdCBjb21wbGV0ZWQgdHJhbnNhY3Rp b24gd2FzIGF0IGxvZyB0aW1lICVzIiwKIAkJCQkJCQl0aW1lc3RhbXB0el90b19zdHIoeHRpbWUp KSkpOwotCi0JCUluUmVkbyA9IGZhbHNlOwogCX0KIAllbHNlCiAJewpAQCAtMTc5Miw2ICsxNzg5 LDkgQEAgUGVyZm9ybVdhbFJlY292ZXJ5KHZvaWQpCiAJCQkJKGVycm1zZygicmVkbyBpcyBub3Qg cmVxdWlyZWQiKSkpOwogCX0KIAorCVJtZ3JDbGVhbnVwKEluUmVkbyk7CisJSW5SZWRvID0gZmFs c2U7CisKIAkvKgogCSAqIFRoaXMgY2hlY2sgaXMgaW50ZW50aW9uYWxseSBhZnRlciB0aGUgYWJv dmUgbG9nIG1lc3NhZ2VzIHRoYXQgaW5kaWNhdGUKIAkgKiBob3cgZmFyIHJlY292ZXJ5IHdlbnQu CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lueGxvZy5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2dpbnhsb2cuaAppbmRleCAyMWRlMzg5ZDc5Li5lNGE5MWE4ZDZlIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lueGxvZy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9n aW54bG9nLmgKQEAgLTIwOSw4ICsyMDksOCBAQCB0eXBlZGVmIHN0cnVjdCBnaW54bG9nRGVsZXRl TGlzdFBhZ2VzCiBleHRlcm4gdm9pZCBnaW5fcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7 CiBleHRlcm4gdm9pZCBnaW5fZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpy ZWNvcmQpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmdpbl9pZGVudGlmeSh1aW50OCBpbmZvKTsKLWV4 dGVybiB2b2lkIGdpbl94bG9nX3N0YXJ0dXAodm9pZCk7Ci1leHRlcm4gdm9pZCBnaW5feGxvZ19j bGVhbnVwKHZvaWQpOworZXh0ZXJuIHZvaWQgZ2luX3hsb2dfc3RhcnR1cChib29sIGluX3JlZG8p OworZXh0ZXJuIHZvaWQgZ2luX3hsb2dfY2xlYW51cChib29sIGluX3JlZG8pOwogZXh0ZXJuIHZv aWQgZ2luX21hc2soY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKTsKIAogI2VuZGlm CQkJCQkJCS8qIEdJTlhMT0dfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dp c3R4bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaAppbmRleCA0NTM3ZTY3ZWJh Li4zOWYwOGE5NjExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaApAQCAtMTA3LDggKzEwNyw4IEBAIHR5 cGVkZWYgc3RydWN0IGdpc3R4bG9nUGFnZVJldXNlCiBleHRlcm4gdm9pZCBnaXN0X3JlZG8oWExv Z1JlYWRlclN0YXRlICpyZWNvcmQpOwogZXh0ZXJuIHZvaWQgZ2lzdF9kZXNjKFN0cmluZ0luZm8g YnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CiBleHRlcm4gY29uc3QgY2hhciAqZ2lzdF9p ZGVudGlmeSh1aW50OCBpbmZvKTsKLWV4dGVybiB2b2lkIGdpc3RfeGxvZ19zdGFydHVwKHZvaWQp OwotZXh0ZXJuIHZvaWQgZ2lzdF94bG9nX2NsZWFudXAodm9pZCk7CitleHRlcm4gdm9pZCBnaXN0 X3hsb2dfc3RhcnR1cChib29sIGluX3JlZG8pOworZXh0ZXJuIHZvaWQgZ2lzdF94bG9nX2NsZWFu dXAoYm9vbCBpbl9yZWRvKTsKIGV4dGVybiB2b2lkIGdpc3RfbWFzayhjaGFyICpwYWdlZGF0YSwg QmxvY2tOdW1iZXIgYmxrbm8pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9uYnR4bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oCmluZGV4IGRlMzYy ZDNjYjkuLmY2ZDA1ZGUwNmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnR4bG9n LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHhsb2cuaApAQCAtMzQ0LDggKzM0NCw4IEBA IHR5cGVkZWYgc3RydWN0IHhsX2J0cmVlX25ld3Jvb3QKIGV4dGVybiB2b2lkIGJ0cmVlX3JlZG8o WExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwogZXh0ZXJuIHZvaWQgYnRyZWVfZGVzYyhTdHJpbmdJ bmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmJ0 cmVlX2lkZW50aWZ5KHVpbnQ4IGluZm8pOwotZXh0ZXJuIHZvaWQgYnRyZWVfeGxvZ19zdGFydHVw KHZvaWQpOwotZXh0ZXJuIHZvaWQgYnRyZWVfeGxvZ19jbGVhbnVwKHZvaWQpOworZXh0ZXJuIHZv aWQgYnRyZWVfeGxvZ19zdGFydHVwKGJvb2wgaW5fcmVkbyk7CitleHRlcm4gdm9pZCBidHJlZV94 bG9nX2NsZWFudXAoYm9vbCBpbl9yZWRvKTsKIGV4dGVybiB2b2lkIGJ0cmVlX21hc2soY2hhciAq cGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKTsKIAogI2VuZGlmCQkJCQkJCS8qIE5CVFhMT0df SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ3hsb2cuaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9zcGd4bG9nLmgKaW5kZXggOTMwZmZkZDRmNy4uNTkyZGRiMWQ4OSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ3hsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3Mvc3BneGxvZy5oCkBAIC0yNTAsOCArMjUwLDggQEAgdHlwZWRlZiBzdHJ1Y3Qgc3BneGxvZ1Zh Y3V1bVJlZGlyZWN0CiBleHRlcm4gdm9pZCBzcGdfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29y ZCk7CiBleHRlcm4gdm9pZCBzcGdfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRl ICpyZWNvcmQpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnNwZ19pZGVudGlmeSh1aW50OCBpbmZvKTsK LWV4dGVybiB2b2lkIHNwZ194bG9nX3N0YXJ0dXAodm9pZCk7Ci1leHRlcm4gdm9pZCBzcGdfeGxv Z19jbGVhbnVwKHZvaWQpOworZXh0ZXJuIHZvaWQgc3BnX3hsb2dfc3RhcnR1cChib29sIGluX3Jl ZG8pOworZXh0ZXJuIHZvaWQgc3BnX3hsb2dfY2xlYW51cChib29sIGluX3JlZG8pOwogZXh0ZXJu IHZvaWQgc3BnX21hc2soY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKTsKIAogI2Vu ZGlmCQkJCQkJCS8qIFNQR1hMT0dfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2dfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nX2ludGVybmFsLmgKaW5k ZXggZmFlMGJlZjhmNS4uMDU4YjJlZjAyMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2dfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5hbC5o CkBAIC0zMTMsMTYgKzMxMywxNiBAQCB0eXBlZGVmIHN0cnVjdCBSbWdyRGF0YQogCXZvaWQJCSgq cm1fcmVkbykgKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKIAl2b2lkCQkoKnJtX2Rlc2MpIChT dHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwogCWNvbnN0IGNoYXIgKigq cm1faWRlbnRpZnkpICh1aW50OCBpbmZvKTsKLQl2b2lkCQkoKnJtX3N0YXJ0dXApICh2b2lkKTsK LQl2b2lkCQkoKnJtX2NsZWFudXApICh2b2lkKTsKKwl2b2lkCQkoKnJtX3N0YXJ0dXApIChib29s IGluX3JlZG8pOworCXZvaWQJCSgqcm1fY2xlYW51cCkgKGJvb2wgaW5fcmVkbyk7CiAJdm9pZAkJ KCpybV9tYXNrKSAoY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKTsKIAl2b2lkCQko KnJtX2RlY29kZSkgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJ ICBzdHJ1Y3QgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIH0gUm1nckRhdGE7CiAKIGV4dGVybiBQ R0RMTElNUE9SVCBSbWdyRGF0YSBSbWdyVGFibGVbXTsKLWV4dGVybiB2b2lkIFJtZ3JTdGFydHVw KHZvaWQpOwotZXh0ZXJuIHZvaWQgUm1nckNsZWFudXAodm9pZCk7CitleHRlcm4gdm9pZCBSbWdy U3RhcnR1cChib29sIGluX3JlZG8pOworZXh0ZXJuIHZvaWQgUm1nckNsZWFudXAoYm9vbCBpbl9y ZWRvKTsKIGV4dGVybiB2b2lkIFJtZ3JOb3RGb3VuZChSbWdySWQgcm1pZCk7CiBleHRlcm4gdm9p ZCBSZWdpc3RlckN1c3RvbVJtZ3IoUm1ncklkIHJtaWQsIFJtZ3JEYXRhICpybWdyKTsKIAo= --00000000000006514405ded738bd--