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 1w52FO-002pXX-0g for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 13:56:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w52FL-006sY9-1W for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 13:56:39 +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 1w52FK-006sY1-2p for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 13:56:39 +0000 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w52FI-00000000nXb-41Lu for pgsql-hackers@postgresql.org; Tue, 24 Mar 2026 13:56:38 +0000 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-829a9d08644so2251770b3a.1 for ; Tue, 24 Mar 2026 06:56:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774360596; cv=none; d=google.com; s=arc-20240605; b=EsM++iNtxKyN0/VpP+M9BE2suOgSg+dT1Ds7fhX3NxbjsoF1N+Ca8WoXl+41tBvcvg n56TJmhHYLsja/uXJ2HoEbWLeJEjrTzveE3ooi6qbyQZmUDn1yDxlHPs1G9n+1b8x4jE l8uFrt7bKy7UcmxSwqyOJADzBJcmJFGZhCpIdpCH2ctlbxhw4GDe7joyeFsuN5OZOQsb tBYvT+FWsAdzy9vUZQCiyLmqjolYl9YUs6lW5Ze7bH6Dftu+CZENcW0jhFFy9s/pQoQc QG6I9MOF0MMTuX/+TcVkIz4MpHiJRj1ICYWHXxrDNkiy+YFY1drRUtkaJdqFo2DC1NPQ cC3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=gf3/B/sGOvn2RVJGDOsABkOo37l8ds6VRghxF8GrwFg=; fh=fuW8KN3DXu00TNdTARuQKHrJ5oaUt4XnuSSbzQl2tY8=; b=Dx5bTFIupuI7jyH6FZrgBlInuH7jnmE7DPj6XPTlMjnbdPWo1RcOOIfuRMI0edHqeP 4mMLQnEYuzl51r1pipdXjZyzTC3Mp4aW5REpu82KiSvsHNCaHskfAg0V6kCq25p45s1W BcYi0ealINrutXgIyAjOAL02NBx5k5U09ZIL8ow4J4n9uIJY/FGxwjJ9wV29PyGXWVso kPQl6qgCXPjMI52yRjg8/Lcox7Np/m/HpDV7zSNkTZs+KfmUe6UTG0DUKzSE7gUZldiS wtnjtR5YQNjdjMwbnh5Ze/d9lD9I+bp2VfT1PxJcHtkFwIqhrHigNrI7PLTKETYalE2L uTqA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774360596; x=1774965396; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=gf3/B/sGOvn2RVJGDOsABkOo37l8ds6VRghxF8GrwFg=; b=tCkSTJaFY986H+UrEwPV1xlGH2F+HE2decT+bNscDyH7PtmF63OaeGCcsTh0BAYMgR aVZIxUGJmMvrAMseOGRtyVYMbRyV1GAGXMZq2bWwFZZwjkvvz6f+p+1XE6PI8WnJ8gmj LL4sMp+p5iVkYQYZgXabC6fjdSUHyS9ufxLwPfEryy3WbIYxI3hhb8olQJhyLNe5Plt0 Z11WQwdZOMS4ddhjks0rdby5n9Ddqo2FyU8O9WsMOec/i8vtzcGgTpoeb1YDWmg9rvOD o2xTsRsLX7k9I7+qcj3wCsCsbDj11mN12/slpjDozjGlUJrfRVrn+JmQFjwC04Uxt/mq nVbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774360596; x=1774965396; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=gf3/B/sGOvn2RVJGDOsABkOo37l8ds6VRghxF8GrwFg=; b=WZfg2jQ/4j3dPeDci6gW7V0MWVYqCMtxQnr8K+peeGxdM3yMA4iTatH7vt+zgI6svl WsKt4pURrqpF/65fQrNau7ghrBOW4YFUgAUkb5anCeKSaGAE5J9sJJbCOKs8k3PrTczl +MOrgD3Worfrmc7L2wjH3/ojMqgCC11mkIWmch5wiFgB00o6CBrL/NWphoAv8vW8Cu8v Q4dIYwkAH65Bn12JLYfsPiwphn6CJKhwfYZGZ7b7jHDodwUKL6lyM4A229GIiTwHY5rO 4nwogWbOfkfigZpU1QEXc6P7uqogb3RMXCGCr7YLjZt29tchOCz1TLwdnjRHQ+K9sjuS pKqA== X-Forwarded-Encrypted: i=1; AJvYcCUQUk2BNKuSF0VYgC7GZgSJOkyCMbZ3DhnBgGMP2Y2RCOPbGODL2M1sH1fKH1hs3DChPqoh9RYPIdErd1WS@postgresql.org X-Gm-Message-State: AOJu0YwTQbKkX+Nyelc10bUoCJDA6wxxCBxmTwdM42FR2xO6exPiK/58 QimAYcAv+6SZlbTxFBcn9ERAodjVHiHjo+EwZ0BZLUsA50hRS2B3cTd2/ByYKRbQW85BqLrO7lg fdnr6RuDwiXWpY9UWiaqXgJI6Ysf0X8Q= X-Gm-Gg: ATEYQzwaRlZPUIm51ueNtW+vohWHig807UYr76iZCBuo+SNujWeeMdl3dCCx33h1tGL bv5r2u1QCPEP3Rm6DNOe7SK0Xv0RvsqKJnSeo4c/TIZqiPwM76oWXKXXMNRXqUwdc7KUCY05RyL hIDgRKenPxWTMXvX2DeKEDHUdFTNU37DOMj5O3u7PL/a+eL22PK8Qyxnc+ln4pZaImuMECm8UBN yOPespqFEtWMMDPqMhIodfRwNSFhFsxxmfDryRFYqX9jdgDE53HtD+bw6KKH5nd/um09njOYoUl NDx0LLbU X-Received: by 2002:a05:6a00:21d2:b0:82a:6b97:34a4 with SMTP id d2e1a72fcca58-82a8c351bfdmr14524667b3a.31.1774360595945; Tue, 24 Mar 2026 06:56:35 -0700 (PDT) MIME-Version: 1.0 References: <2BE661BA-D909-4093-BF78-DB9B0C099337@gmail.com> In-Reply-To: From: Amit Langote Date: Tue, 24 Mar 2026 22:56:18 +0900 X-Gm-Features: AaiRm51EniRhHZJEkrHGRHVdV67plhUXwDrD3CW8wmmQx2FkPoSUx8li6QSOW1A Message-ID: Subject: Re: Eliminating SPI / SQL from some RI triggers - take 3 To: Junwang Zhao Cc: Haibo Yan , Pavel Stehule , PostgreSQL-development , Tomas Vondra Content-Type: multipart/mixed; boundary="000000000000067c2b064dc585a8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000067c2b064dc585a8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 24, 2026 at 8:47=E2=80=AFPM Amit Langote wrote: > > Hi Junwang, > > On Fri, Mar 20, 2026 at 1:20=E2=80=AFAM Junwang Zhao = wrote: > > I squashed 0004 into 0003 so that each file can be committed independen= tly. > > I also runned pgindent for each file. > > Thanks for that. > > Here's another version. > > In 0001, I noticed that the condition change in ri_HashCompareOp could > be simplified further. Also improved the commentary surrounding that. > I also updated the commit message to clarify parity with the SPI path. > > Updated the commit message of 0002 to talk about why caching the > snapshot for the entire trigger firing cycle of a given constraint > makes a trade off compared to the SPI path which retakes the snapshot > for every row checked and could in principle avoid failure for FK rows > whose corresponding PK row was added by a concurrently committed > transaction, at least in the READ COMMITTED case. > > Updated the commit message of 0003 to clarify that it replaces > ri_FastPathCheckCached() from 0002 with the BatchAdd/BatchFlush pair, > and that the cached resources are used unchanged -- only the probing > cadence changes from per-row to per-flush. Per-flush CCI is safe > because all AFTER triggers for the buffered rows have already fired > by flush time; a new test case is added to show that. Kept thinking about this on a walk after I sent this and came to the conclusion that it might be better to just not cache the snapshot with only the above argument in its favor. If repeated GetSnapshotData() is expensive, the solution should be to fix that instead of simply side-stepping it. By taking a snapshot per-batch without caching it, and so likewise the IndexScanDesc, I'm seeing the same ~3x speedup in the batched SK_SEARCHARRAY case, so I don't see much point in being very stubborn about snapshot caching. Like in the attached (there's an unrelated memory context switch thinko fix). Note that relations (pk_rel, idx_rel) and the slot remain cached across the batch; only the snapshot and scandesc are taken fresh per flush. I'll post an updated version tomorrow morning. I think it might be better to just merge 0003 into 0002, because without snapshot and scandesc caching the standalone value of 0002 is mostly just relation and slot caching -- the interesting parts (batch callbacks, lifecycle management) are all scaffolding for the batching. So v10 will be two patches: 0001 core fast path, 0002 everything else. --=20 Thanks, Amit Langote --000000000000067c2b064dc585a8 Content-Type: text/plain; charset="US-ASCII"; name="v9_delta.patch.txt" Content-Disposition: attachment; filename="v9_delta.patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn4o2voh0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKaW5kZXggOTkzYzNhYzQ5YTMuLmYyNzFmZmNj YzAwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwpAQCAtMjI0LDEwICsyMjQsOCBA QCB0eXBlZGVmIHN0cnVjdCBSSV9GYXN0UGF0aEVudHJ5CiAJT2lkCQkJY29ub2lkOwkJCS8qIGhh c2gga2V5OiBwZ19jb25zdHJhaW50IE9JRCAqLwogCVJlbGF0aW9uCXBrX3JlbDsKIAlSZWxhdGlv bglpZHhfcmVsOwotCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKnBr X3Nsb3Q7CiAJVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3Q7Ci0JU25hcHNob3QJc25hcHNob3Q7CQkv KiByZWdpc3RlcmVkIHNuYXBzaG90IGZvciB0aGUgc2NhbiAqLwogCU1lbW9yeUNvbnRleHQgc2Nh bl9jeHQ7CQkvKiBpbmRleCBzY2FuIGFsbG9jYXRpb25zICovCiAJTWVtb3J5Q29udGV4dCBmbHVz aF9jeHQ7CS8qIHNob3J0LWxpdmVkIGNvbnRleHQgZm9yIHBlci1mbHVzaCB3b3JrICovCiAKQEAg LTMwMSw5ICsyOTksMTEgQEAgc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhDaGVjayhjb25zdCBSSV9D b25zdHJhaW50SW5mbyAqcmlpbmZvLAogc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhCYXRjaEFkZChj b25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCQkJCQkJCQlSZWxhdGlvbiBma19yZWws IFR1cGxlVGFibGVTbG90ICpuZXdzbG90KTsKIHN0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoRmx1c2hB cnJheShSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBUdXBsZVRhYmxlU2xvdCAqZmtfc2xvdCwK LQkJCQkJCQkJICBjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBma19y ZWwpOworCQkJCQkJCQkgIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sIFJlbGF0aW9u IGZrX3JlbCwKKwkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCk7CiBzdGF0aWMgdm9pZCByaV9G YXN0UGF0aEZsdXNoTG9vcChSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBUdXBsZVRhYmxlU2xv dCAqZmtfc2xvdCwKLQkJCQkJCQkJIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sIFJl bGF0aW9uIGZrX3JlbCk7CisJCQkJCQkJCSBjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZv LCBSZWxhdGlvbiBma19yZWwsCisJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCk7CiBzdGF0aWMg dm9pZCByaV9GYXN0UGF0aEJhdGNoRmx1c2goUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwKIAkJ CQkJCQkJICBSZWxhdGlvbiBma19yZWwpOwogc3RhdGljIGJvb2wgcmlfRmFzdFBhdGhQcm9iZU9u ZShSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGlkeF9yZWwsCkBAIC0yODU3LDggKzI4NTcsOCBA QCByaV9GYXN0UGF0aEJhdGNoRmx1c2goUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgUmVsYXRp b24gZmtfcmVsKQogCWNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8gPSBmcGVudHJ5LT5y aWluZm87CiAJUmVsYXRpb24JcGtfcmVsID0gZnBlbnRyeS0+cGtfcmVsOwogCVJlbGF0aW9uCWlk eF9yZWwgPSBmcGVudHJ5LT5pZHhfcmVsOwotCVNuYXBzaG90CXNuYXBzaG90ID0gZnBlbnRyeS0+ c25hcHNob3Q7CiAJVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QgPSBmcGVudHJ5LT5ma19zbG90Owor CVNuYXBzaG90CXNuYXBzaG90OwogCU9pZAkJCXNhdmVkX3VzZXJpZDsKIAlpbnQJCQlzYXZlZF9z ZWNfY29udGV4dDsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0 OwpAQCAtMjg4Miw3ICsyODgyLDcgQEAgcmlfRmFzdFBhdGhCYXRjaEZsdXNoKFJJX0Zhc3RQYXRo RW50cnkgKmZwZW50cnksIFJlbGF0aW9uIGZrX3JlbCkKIAkgKiBjb250ZXh0IHBlciByb3cgd2hl cmVhcyB3ZSBkbyBpdCBvbmNlIGFyb3VuZCB0aGUgd2hvbGUgYmF0Y2guCiAJICovCiAJQ29tbWFu ZENvdW50ZXJJbmNyZW1lbnQoKTsKLQlzbmFwc2hvdC0+Y3VyY2lkID0gR2V0Q3VycmVudENvbW1h bmRJZChmYWxzZSk7CisJc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldFRyYW5zYWN0aW9u U25hcHNob3QoKSk7CiAKIAlHZXRVc2VySWRBbmRTZWNDb250ZXh0KCZzYXZlZF91c2VyaWQsICZz YXZlZF9zZWNfY29udGV4dCk7CiAJU2V0VXNlcklkQW5kU2VjQ29udGV4dChSZWxhdGlvbkdldEZv cm0ocGtfcmVsKS0+cmVsb3duZXIsCkBAIC0yODkxLDExICsyODkxLDEyIEBAIHJpX0Zhc3RQYXRo QmF0Y2hGbHVzaChSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBSZWxhdGlvbiBma19yZWwpCiAJ CQkJCQkgICBTRUNVUklUWV9OT0ZPUkNFX1JMUyk7CiAKIAlpZiAocmlpbmZvLT5ua2V5cyA9PSAx KQotCQlyaV9GYXN0UGF0aEZsdXNoQXJyYXkoZnBlbnRyeSwgZmtfc2xvdCwgcmlpbmZvLCBma19y ZWwpOworCQlyaV9GYXN0UGF0aEZsdXNoQXJyYXkoZnBlbnRyeSwgZmtfc2xvdCwgcmlpbmZvLCBm a19yZWwsIHNuYXBzaG90KTsKIAllbHNlCi0JCXJpX0Zhc3RQYXRoRmx1c2hMb29wKGZwZW50cnks IGZrX3Nsb3QsIHJpaW5mbywgZmtfcmVsKTsKKwkJcmlfRmFzdFBhdGhGbHVzaExvb3AoZnBlbnRy eSwgZmtfc2xvdCwgcmlpbmZvLCBma19yZWwsIHNuYXBzaG90KTsKIAlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY3h0KTsKIAlTZXRVc2VySWRBbmRTZWNDb250ZXh0KHNhdmVkX3VzZXJpZCwgc2F2 ZWRfc2VjX2NvbnRleHQpOworCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CiAKIAkvKiBG cmVlIG1hdGVyaWFsaXplZCB0dXBsZXMgYW5kIHJlc2V0ICovCiAJZm9yIChpbnQgaSA9IDA7IGkg PCBmcGVudHJ5LT5iYXRjaF9jb3VudDsgaSsrKQpAQCAtMjkxMiwyOSArMjkxMywzMCBAQCByaV9G YXN0UGF0aEJhdGNoRmx1c2goUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgUmVsYXRpb24gZmtf cmVsKQogICovCiBzdGF0aWMgdm9pZAogcmlfRmFzdFBhdGhGbHVzaExvb3AoUklfRmFzdFBhdGhF bnRyeSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCi0JCQkJCSBjb25zdCBSSV9D b25zdHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBma19yZWwpCisJCQkJCSBjb25zdCBSSV9D b25zdHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBma19yZWwsCisJCQkJCSBTbmFwc2hvdCBz bmFwc2hvdCkKIHsKIAlSZWxhdGlvbglwa19yZWwgPSBmcGVudHJ5LT5wa19yZWw7CiAJUmVsYXRp b24JaWR4X3JlbCA9IGZwZW50cnktPmlkeF9yZWw7Ci0JSW5kZXhTY2FuRGVzYyBzY2FuZGVzYyA9 IGZwZW50cnktPnNjYW5kZXNjOwogCVR1cGxlVGFibGVTbG90ICpwa19zbG90ID0gZnBlbnRyeS0+ cGtfc2xvdDsKLQlTbmFwc2hvdAlzbmFwc2hvdCA9IGZwZW50cnktPnNuYXBzaG90OworCUluZGV4 U2NhbkRlc2Mgc2NhbmRlc2M7CiAJRGF0dW0JCXBrX3ZhbHNbSU5ERVhfTUFYX0tFWVNdOwogCWNo YXIJCXBrX251bGxzW0lOREVYX01BWF9LRVlTXTsKIAlTY2FuS2V5RGF0YSBza2V5W0lOREVYX01B WF9LRVlTXTsKKwlib29sCQlmb3VuZCA9IHRydWU7CisJLyoKKwkgKiBidWlsZF9pbmRleF9zY2Fu a2V5cygpIG1heSBwYWxsb2MgY2FzdCByZXN1bHRzIGZvciBjcm9zcy10eXBlIEZLcy4KKwkgKiBV c2UgdGhlIGVudHJ5J3Mgc2hvcnQtbGl2ZWQgZmx1c2ggY29udGV4dCBzbyB0aGVzZSBkb24ndCBh Y2N1bXVsYXRlCisJICogYWNyb3NzIGJhdGNoZXMuCisJICovCisJTWVtb3J5Q29udGV4dCBvbGRj eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnBlbnRyeS0+Zmx1c2hfY3h0KTsKIAorCXNjYW5k ZXNjID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwgc25hcHNob3QsIE5VTEwsCisJ CQkJCQkJICAgcmlpbmZvLT5ua2V5cywgMCk7CiAJZm9yIChpbnQgaSA9IDA7IGkgPCBmcGVudHJ5 LT5iYXRjaF9jb3VudDsgaSsrKQogCXsKLQkJYm9vbAkJZm91bmQgPSBmYWxzZTsKIAogCQlFeGVj U3RvcmVIZWFwVHVwbGUoZnBlbnRyeS0+YmF0Y2hbaV0sIGZrX3Nsb3QsIGZhbHNlKTsKLQotCQkv KgotCQkgKiBidWlsZF9pbmRleF9zY2Fua2V5cygpIG1heSBwYWxsb2MgY2FzdCByZXN1bHRzIGZv ciBjcm9zcy10eXBlIEZLcy4KLQkJICogVXNlIHRoZSBlbnRyeSdzIHNob3J0LWxpdmVkIGZsdXNo IGNvbnRleHQgc28gdGhlc2UgZG9uJ3QgYWNjdW11bGF0ZQotCQkgKiBhY3Jvc3MgYmF0Y2hlcy4K LQkJICovCi0JCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmcGVudHJ5LT5mbHVzaF9jeHQpOwogCQly aV9FeHRyYWN0VmFsdWVzKGZrX3JlbCwgZmtfc2xvdCwgcmlpbmZvLCBmYWxzZSwgcGtfdmFscywg cGtfbnVsbHMpOwogCQlidWlsZF9pbmRleF9zY2Fua2V5cyhyaWluZm8sIGlkeF9yZWwsIHBrX3Zh bHMsIHBrX251bGxzLCBza2V5KTsKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZwZW50cnktPnNj YW5fY3h0KTsKQEAgLTI5NDMsMTEgKzI5NDUsMTUgQEAgcmlfRmFzdFBhdGhGbHVzaExvb3AoUklf RmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCiAJCQkJCQkJ CQlzbmFwc2hvdCwgcmlpbmZvLCBza2V5LCByaWluZm8tPm5rZXlzKTsKIAogCQlpZiAoIWZvdW5k KQotCQkJcmlfUmVwb3J0VmlvbGF0aW9uKHJpaW5mbywgcGtfcmVsLCBma19yZWwsCi0JCQkJCQkJ ICAgZmtfc2xvdCwgTlVMTCwKLQkJCQkJCQkgICBSSV9QTEFOX0NIRUNLX0xPT0tVUFBLLCBmYWxz ZSwgZmFsc2UpOworCQkJYnJlYWs7CiAJfQorCWluZGV4X2VuZHNjYW4oc2NhbmRlc2MpOwogCU1l bW9yeUNvbnRleHRSZXNldChmcGVudHJ5LT5mbHVzaF9jeHQpOworCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjeHQpOworCWlmICghZm91bmQpCisJCXJpX1JlcG9ydFZpb2xhdGlvbihyaWluZm8s IHBrX3JlbCwgZmtfcmVsLAorCQkJCQkJICAgZmtfc2xvdCwgTlVMTCwKKwkJCQkJCSAgIFJJX1BM QU5fQ0hFQ0tfTE9PS1VQUEssIGZhbHNlLCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0yOTYyLDE0ICsy OTY4LDE0IEBAIHJpX0Zhc3RQYXRoRmx1c2hMb29wKFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnks IFR1cGxlVGFibGVTbG90ICpma19zbG90LAogICovCiBzdGF0aWMgdm9pZAogcmlfRmFzdFBhdGhG bHVzaEFycmF5KFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnksIFR1cGxlVGFibGVTbG90ICpma19z bG90LAotCQkJCQkgIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sIFJlbGF0aW9uIGZr X3JlbCkKKwkJCQkJICBjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBm a19yZWwsCisJCQkJCSAgU25hcHNob3Qgc25hcHNob3QpCiB7CiAJRmFzdFBhdGhNZXRhICpmcG1l dGEgPSByaWluZm8tPmZwbWV0YTsKIAlSZWxhdGlvbglwa19yZWwgPSBmcGVudHJ5LT5wa19yZWw7 CiAJUmVsYXRpb24JaWR4X3JlbCA9IGZwZW50cnktPmlkeF9yZWw7Ci0JSW5kZXhTY2FuRGVzYyBz Y2FuZGVzYyA9IGZwZW50cnktPnNjYW5kZXNjOwogCVR1cGxlVGFibGVTbG90ICpwa19zbG90ID0g ZnBlbnRyeS0+cGtfc2xvdDsKLQlTbmFwc2hvdAlzbmFwc2hvdCA9IGZwZW50cnktPnNuYXBzaG90 OworCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CiAJRGF0dW0JCXNlYXJjaF92YWxzW1JJX0ZBU1RQ QVRIX0JBVENIX1NJWkVdOwogCWJvb2wJCW1hdGNoZWRbUklfRkFTVFBBVEhfQkFUQ0hfU0laRV07 CiAJaW50CQkJbnZhbHMgPSBmcGVudHJ5LT5iYXRjaF9jb3VudDsKQEAgLTI5ODMsMTYgKzI5ODks MTkgQEAgcmlfRmFzdFBhdGhGbHVzaEFycmF5KFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnksIFR1 cGxlVGFibGVTbG90ICpma19zbG90LAogCWNoYXIJCWVsZW1fYWxpZ247CiAJQXJyYXlUeXBlICAq YXJyOwogCi0JQXNzZXJ0KGZwbWV0YSk7Ci0KLQltZW1zZXQobWF0Y2hlZCwgMCwgbnZhbHMgKiBz aXplb2YoYm9vbCkpOwotCiAJLyoKIAkgKiBUcmFuc2llbnQgcGVyLWZsdXNoIGFsbG9jYXRpb25z IChjYXN0IHJlc3VsdHMsIHRoZSBzZWFyY2ggYXJyYXkpIG11c3QKIAkgKiBub3QgYWNjdW11bGF0 ZSBhY3Jvc3MgcmVwZWF0ZWQgZmx1c2hlcy4gIFVzZSB0aGUgZW50cnkncyBzaG9ydC1saXZlZAog CSAqIGZsdXNoIGNvbnRleHQsIHJlc2V0IGFmdGVyIGVhY2ggZmx1c2guCiAJICovCi0JTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGZwZW50cnktPmZsdXNoX2N4dCk7CisJTWVtb3J5Q29udGV4dCBvbGRj eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnBlbnRyeS0+Zmx1c2hfY3h0KTsKKworCUFzc2Vy dChmcG1ldGEpOworCisJbWVtc2V0KG1hdGNoZWQsIDAsIG52YWxzICogc2l6ZW9mKGJvb2wpKTsK KworCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwgc25hcHNob3Qs IE5VTEwsCisJCQkJCQkJICAgcmlpbmZvLT5ua2V5cywgMCk7CiAKIAkvKgogCSAqIEV4dHJhY3Qg RksgdmFsdWVzLCBjYXN0aW5nIHRvIHRoZSBvcGVyYXRvcidzIGV4cGVjdGVkIGlucHV0IHR5cGUg aWYKQEAgLTMxMDMsNiArMzExMiwxMSBAQCByaV9GYXN0UGF0aEZsdXNoQXJyYXkoUklfRmFzdFBh dGhFbnRyeSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCiAJCX0KIAl9CiAKKwlp bmRleF9lbmRzY2FuKHNjYW5kZXNjKTsKKworCU1lbW9yeUNvbnRleHRSZXNldChmcGVudHJ5LT5m bHVzaF9jeHQpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCiAJLyogUmVwb3J0 IGZpcnN0IHVubWF0Y2hlZCByb3cgKi8KIAlmb3IgKGludCBpID0gMDsgaSA8IG52YWxzOyBpKysp CiAJewpAQCAtMzExNCw4ICszMTI4LDYgQEAgcmlfRmFzdFBhdGhGbHVzaEFycmF5KFJJX0Zhc3RQ YXRoRW50cnkgKmZwZW50cnksIFR1cGxlVGFibGVTbG90ICpma19zbG90LAogCQkJCQkJCSAgIFJJ X1BMQU5fQ0hFQ0tfTE9PS1VQUEssIGZhbHNlLCBmYWxzZSk7CiAJCX0KIAl9Ci0KLQlNZW1vcnlD b250ZXh0UmVzZXQoZnBlbnRyeS0+Zmx1c2hfY3h0KTsKIH0KIAogLyoKQEAgLTQxMDYsOSArNDEx OCw2IEBAIHJpX0Zhc3RQYXRoVGVhcmRvd24odm9pZCkKIAloYXNoX3NlcV9pbml0KCZzdGF0dXMs IHJpX2Zhc3RwYXRoX2NhY2hlKTsKIAl3aGlsZSAoKGVudHJ5ID0gaGFzaF9zZXFfc2VhcmNoKCZz dGF0dXMpKSAhPSBOVUxMKQogCXsKLQkJLyogQ2xvc2UgYm90aCBzY2FucyBiZWZvcmUgY2xvc2lu ZyBpZHhfcmVsLiAqLwotCQlpZiAoZW50cnktPnNjYW5kZXNjKQotCQkJaW5kZXhfZW5kc2Nhbihl bnRyeS0+c2NhbmRlc2MpOwogCQlpZiAoZW50cnktPmlkeF9yZWwpCiAJCQlpbmRleF9jbG9zZShl bnRyeS0+aWR4X3JlbCwgTm9Mb2NrKTsKIAkJaWYgKGVudHJ5LT5wa19yZWwpCkBAIC00MTE3LDgg KzQxMjYsNiBAQCByaV9GYXN0UGF0aFRlYXJkb3duKHZvaWQpCiAJCQlFeGVjRHJvcFNpbmdsZVR1 cGxlVGFibGVTbG90KGVudHJ5LT5wa19zbG90KTsKIAkJaWYgKGVudHJ5LT5ma19zbG90KQogCQkJ RXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChlbnRyeS0+Zmtfc2xvdCk7Ci0JCWlmIChlbnRy eS0+c25hcHNob3QpCi0JCQlVbnJlZ2lzdGVyU25hcHNob3QoZW50cnktPnNuYXBzaG90KTsKIAkJ aWYgKGVudHJ5LT5zY2FuX2N4dCkKIAkJCU1lbW9yeUNvbnRleHREZWxldGUoZW50cnktPnNjYW5f Y3h0KTsKIAl9CkBAIC00MjMyLDIxICs0MjM5LDEwIEBAIHJpX0Zhc3RQYXRoR2V0RW50cnkoY29u c3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRpb24gZmtfcmVsKQogCQllbnRyeS0+ cGtfcmVsID0gdGFibGVfb3BlbihyaWluZm8tPnBrX3JlbGlkLCBSb3dTaGFyZUxvY2spOwogCQll bnRyeS0+aWR4X3JlbCA9IGluZGV4X29wZW4ocmlpbmZvLT5jb25pbmRpZCwgQWNjZXNzU2hhcmVM b2NrKTsKIAotCQkvKgotCQkgKiBSZWdpc3RlciBhbiBpbml0aWFsIHNuYXBzaG90LiAgSXRzIGN1 cmNpZCB3aWxsIGJlIHBhdGNoZWQgaW4gcGxhY2UKLQkJICogb24gZWFjaCBzdWJzZXF1ZW50IHJv dyAoc2VlIHJpX0Zhc3RQYXRoQmF0Y2hGbHVzaCgpKSwgYXZvaWRpbmcKLQkJICogcGVyLXJvdyBH ZXRTbmFwc2hvdERhdGEoKSBvdmVyaGVhZC4KLQkJICovCi0JCWVudHJ5LT5zbmFwc2hvdCA9IFJl Z2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKLQogCQllbnRyeS0+cGtf c2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKGVudHJ5LT5wa19yZWwsIE5VTEwpOwogCQllbnRyeS0+ Zmtfc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERlc2NyKGZrX3Jl bCksCiAJCQkJCQkJCQkJCQkgICZUVFNPcHNIZWFwVHVwbGUpOwogCi0JCWVudHJ5LT5zY2FuZGVz YyA9IGluZGV4X2JlZ2luc2NhbihlbnRyeS0+cGtfcmVsLCBlbnRyeS0+aWR4X3JlbCwKLQkJCQkJ CQkJCQkgIGVudHJ5LT5zbmFwc2hvdCwgTlVMTCwKLQkJCQkJCQkJCQkgIHJpaW5mby0+bmtleXMs IDApOwotCiAJCWVudHJ5LT5zY2FuX2N4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BUcmFu c2FjdGlvbkNvbnRleHQsCiAJCQkJCQkJCQkJCQkiUkkgZmFzdCBwYXRoIHNjYW4gY29udGV4dCIs CiAJCQkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsK --000000000000067c2b064dc585a8--