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 1jzU2F-0005kI-Ja for pgsql-hackers@arkaria.postgresql.org; Sat, 25 Jul 2020 23:56:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jzU2E-0004gB-HY for pgsql-hackers@arkaria.postgresql.org; Sat, 25 Jul 2020 23:56:58 +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 1jzU2D-0004g2-Uc for pgsql-hackers@lists.postgresql.org; Sat, 25 Jul 2020 23:56:58 +0000 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1jzU2B-0000qb-KO for pgsql-hackers@postgresql.org; Sat, 25 Jul 2020 23:56:56 +0000 Received: by mail-pl1-x62a.google.com with SMTP id 72so6321281ple.0 for ; Sat, 25 Jul 2020 16:56:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version; bh=t5j8aKa/9bCzC0kerkJPYXEmP06S5fC9CtqlGFc1Dnk=; b=iF0clfz5eWpgZez8ZaitzU6bSvyT2dfcUZm//p1GDVQ1yhpDqHZQ11Yxh177a2/nly iqmH+wtIUAAdaiKGTEdxAII8JT/x5UvEeYiQwNOe6lVRIPxKCMmfjldecH3HQlYgUM6C S1JO/iNQuwvzHhWCGZXGfnpoAJ7jqzmhROhrtXVHFVrP2iFMfgYgS35n3813qtWmYfDJ lt3kPOWUWVpTdQX8Ivc+YpECAtQnzfGupLvosYpUwnQZSv+Y6/fBpLqTbdMrANzn03vW C6ureys99dmWzMY+WpfXZuIlSoEUmgHsG3HaxXAdzzWVEKsOL3HYqZHEGIeoFlXFkQuR JFvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version; bh=t5j8aKa/9bCzC0kerkJPYXEmP06S5fC9CtqlGFc1Dnk=; b=Exkz7CEuIny/R9+Q2OUouiF19YEec37f51v21OuaqdNHbDLBPJ00EyXFLsTaEnFd9z nM7sZRlByeuTbbGPymy/BaNw8Ki9VTLda/nuLPWtbOs/huI4NbhyfN0MBW2tnj/yIUyu o5qy61y9o+MezPmZjCr392iIYuxq6fG6CCMdWpyJyk74ZN0RYDCiUb6KTuGitkpX/spP KOChI8W2BSiuHrztU029kxLqXwGkl74zLaBtwymC+N/nWXL4HxfVe5Ze3l8CpXZduM9C hRkg8KNZjLsaMTh1wGOTXUozhz04cOckTLZ4kHizUZW5tX7NbSsTAxRfnBzWRsAh2WyR kqyQ== X-Gm-Message-State: AOAM532IO+gptinOsI13Z6/GnjIdxQLYLkYFnN4N0TkQmbR59Ux3J+6S MrbZ5M95OsbuGDpG36xYBZBQqw== X-Google-Smtp-Source: ABdhPJwA+kQG5ccVu0I3DysddtB3HkMHzkIonbcED5G0MSsOn4E87h7WaTjy2hxFbGhwfq9JJFlsOA== X-Received: by 2002:a17:90b:4c0f:: with SMTP id na15mr3400789pjb.39.1595721414436; Sat, 25 Jul 2020 16:56:54 -0700 (PDT) Received: from jdavis.lan (c-73-231-146-4.hsd1.ca.comcast.net. [73.231.146.4]) by smtp.gmail.com with ESMTPSA id v22sm10440361pfe.48.2020.07.25.16.56.52 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 25 Jul 2020 16:56:53 -0700 (PDT) Message-ID: Subject: Re: Default setting for enable_hashagg_disk From: Jeff Davis To: Peter Geoghegan Cc: Tomas Vondra , Tom Lane , Alvaro Herrera , David Rowley , Stephen Frost , Andres Freund , Bruce Momjian , Robert Haas , Justin Pryzby , Melanie Plageman , "pgsql-hackers@postgresql.org" Date: Sat, 25 Jul 2020 16:56:51 -0700 In-Reply-To: References: <6d0aba397625df79bdc3ca85adc11b9e48ecb0da.camel@j-davis.com> <4118680.1595097043@sss.pgh.pa.us> <571473265c5d5309f4012855ebd2131c136073ab.camel@j-davis.com> <32871.1595121333@sss.pgh.pa.us> <88c0af01ad9ac105e424768808a214d855e29a77.camel@j-davis.com> <20200720004827.4c46ikcdrfum6xyu@development> <400617.1595251041@sss.pgh.pa.us> <20200720172539.6jov6ynljly4wj6i@development> <20200724012248.y77rpqc73agrsvb3@development> <20200724084047.hnhigkgagzifuitd@development> <6ba7eb1d35f79314685aba5bc891cec63f617ddb.camel@j-davis.com> Content-Type: multipart/mixed; boundary="=-omq7CAa1EedIK3tBcFn2" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=-omq7CAa1EedIK3tBcFn2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Sat, 2020-07-25 at 13:27 -0700, Peter Geoghegan wrote: > It's not clear to me that overpartitioning is a real problem in > > this > > case -- but I think the fact that it's causing confusion is enough > > reason to see if we can fix it. > > I'm not sure about that either. > > FWIW I notice that when I reduce work_mem a little further (to 3MB) > with the same query, the number of partitions is still 128, while the > number of run time batches is 16,512 (an increase from 11,456 from > 6MB > work_mem). I notice that 16512/128 is 129, which hints at the nature > of what's going on with the recursion. I guess it would be ideal if > the growth in batches was more gradual as I subtract memory. I wrote a quick patch to use HyperLogLog to estimate the number of groups contained in a spill file. It seems to reduce the overpartitioning effect, and is a more principled approach than what I was doing before. It does seem to hurt the runtime slightly when spilling to disk in some cases. I haven't narrowed down whether this is because we end up recursing multiple times, or if it's just more efficient to overpartition, or if the cost of doing the HLL itself is significant. Regards, Jeff Davis --=-omq7CAa1EedIK3tBcFn2 Content-Disposition: attachment; filename="0001-HLL.patch" Content-Type: text/x-patch; name="0001-HLL.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA0MjRmNjExZjQ0MmUzNmE5MTc0N2ZkMzljZDI4YWNiYTQyZWI5NThiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBT YXQsIDI1IEp1bCAyMDIwIDE0OjI5OjU5IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gSExMCgotLS0K IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYyB8IDY0ICsrKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVBZ2cuaCB8ICAyICstCiAy IGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVBZ2cuYwppbmRleCBiNzljODQ1YTZiNy4uMjU3NzFjYjQ4NjkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlQWdnLmMKQEAgLTI0NSw5ICsyNDUsMTEgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Fn Z3JlZ2F0ZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKICNpbmNsdWRlICJleGVj dXRvci9leGVjRXhwci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVk ZSAiZXhlY3V0b3Ivbm9kZUFnZy5oIgorI2luY2x1ZGUgImxpYi9oeXBlcmxvZ2xvZy5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1 ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgpAQCAtMjk1LDYgKzI5NywxNCBAQAogI2RlZmluZSBIQVNI QUdHX1JFQURfQlVGRkVSX1NJWkUgQkxDS1NaCiAjZGVmaW5lIEhBU0hBR0dfV1JJVEVfQlVGRkVS X1NJWkUgQkxDS1NaCiAKKy8qCisgKiBIeXBlckxvZ0xvZyBpcyB1c2VkIGZvciBlc3RpbWF0aW5n IHRoZSBjYXJkaW5hbGl0eSBvZiB0aGUgc3BpbGxlZCB0dXBsZXMgaW4KKyAqIGEgZ2l2ZW4gcGFy dGl0aW9uLiA1IGJpdHMgY29ycmVzcG9uZHMgdG8gYSBzaXplIG9mIGFib3V0IDMyIGJ5dGVzIGFu ZCBhCisgKiB3b3JzdC1jYXNlIGVycm9yIG9mIGFyb3VuZCAxOCUuIFRoYXQncyBlZmZlY3RpdmUg ZW5vdWdoIHRvIGNob29zZSBhCisgKiByZWFzb25hYmxlIG51bWJlciBvZiBwYXJ0aXRpb25zIHdo ZW4gcmVjdXJzaW5nLgorICovCisjZGVmaW5lIEhBU0hBR0dfSExMX0JJVF9XSURUSCA1CisKIC8q CiAgKiBFc3RpbWF0ZSBjaHVuayBvdmVyaGVhZCBhcyBhIGNvbnN0YW50IDE2IGJ5dGVzLiBYWFg6 IHNob3VsZCB0aGlzIGJlCiAgKiBpbXByb3ZlZD8KQEAgLTMzOSw2ICszNDksNyBAQCB0eXBlZGVm IHN0cnVjdCBIYXNoQWdnU3BpbGwKIAlpbnQ2NAkgICAqbnR1cGxlczsJCS8qIG51bWJlciBvZiB0 dXBsZXMgaW4gZWFjaCBwYXJ0aXRpb24gKi8KIAl1aW50MzIJCW1hc2s7CQkJLyogbWFzayB0byBm aW5kIHBhcnRpdGlvbiBmcm9tIGhhc2ggdmFsdWUgKi8KIAlpbnQJCQlzaGlmdDsJCQkvKiBhZnRl ciBtYXNraW5nLCBzaGlmdCBieSB0aGlzIGFtb3VudCAqLworCWh5cGVyTG9nTG9nU3RhdGUgKmhs bF9jYXJkOwkvKiBjYXJkaW5hbGl0eSBlc3RpbWF0ZSBmb3IgY29udGVudHMgKi8KIH0gSGFzaEFn Z1NwaWxsOwogCiAvKgpAQCAtMzU3LDYgKzM2OCw3IEBAIHR5cGVkZWYgc3RydWN0IEhhc2hBZ2dC YXRjaAogCUxvZ2ljYWxUYXBlU2V0ICp0YXBlc2V0OwkvKiBib3Jyb3dlZCByZWZlcmVuY2UgdG8g dGFwZSBzZXQgKi8KIAlpbnQJCQlpbnB1dF90YXBlbnVtOwkvKiBpbnB1dCBwYXJ0aXRpb24gdGFw ZSAqLwogCWludDY0CQlpbnB1dF90dXBsZXM7CS8qIG51bWJlciBvZiB0dXBsZXMgaW4gdGhpcyBi YXRjaCAqLworCWRvdWJsZQkJaW5wdXRfY2FyZDsJCS8qIGVzdGltYXRlZCBncm91cCBjYXJkaW5h bGl0eSAqLwogfSBIYXNoQWdnQmF0Y2g7CiAKIC8qIHVzZWQgdG8gZmluZCByZWZlcmVuY2VkIGNv bG5vcyAqLwpAQCAtNDA5LDcgKzQyMSw3IEBAIHN0YXRpYyB2b2lkIGhhc2hhZ2dfcmVjb21waWxl X2V4cHJlc3Npb25zKEFnZ1N0YXRlICphZ2dzdGF0ZSwgYm9vbCBtaW5zbG90LAogc3RhdGljIGxv bmcgaGFzaF9jaG9vc2VfbnVtX2J1Y2tldHMoZG91YmxlIGhhc2hlbnRyeXNpemUsCiAJCQkJCQkJ CQlsb25nIGVzdGltYXRlZF9uYnVja2V0cywKIAkJCQkJCQkJCVNpemUgbWVtb3J5KTsKLXN0YXRp YyBpbnQJaGFzaF9jaG9vc2VfbnVtX3BhcnRpdGlvbnModWludDY0IGlucHV0X2dyb3VwcywKK3N0 YXRpYyBpbnQJaGFzaF9jaG9vc2VfbnVtX3BhcnRpdGlvbnMoZG91YmxlIGlucHV0X2dyb3VwcywK IAkJCQkJCQkJCSAgIGRvdWJsZSBoYXNoZW50cnlzaXplLAogCQkJCQkJCQkJICAgaW50IHVzZWRf Yml0cywKIAkJCQkJCQkJCSAgIGludCAqbG9nMl9ucGFydGl0dGlvbnMpOwpAQCAtNDI5LDEwICs0 NDEsMTEgQEAgc3RhdGljIHZvaWQgaGFzaGFnZ19maW5pc2hfaW5pdGlhbF9zcGlsbHMoQWdnU3Rh dGUgKmFnZ3N0YXRlKTsKIHN0YXRpYyB2b2lkIGhhc2hhZ2dfcmVzZXRfc3BpbGxfc3RhdGUoQWdn U3RhdGUgKmFnZ3N0YXRlKTsKIHN0YXRpYyBIYXNoQWdnQmF0Y2ggKmhhc2hhZ2dfYmF0Y2hfbmV3 KExvZ2ljYWxUYXBlU2V0ICp0YXBlc2V0LAogCQkJCQkJCQkJICAgaW50IGlucHV0X3RhcGVudW0s IGludCBzZXRubywKLQkJCQkJCQkJCSAgIGludDY0IGlucHV0X3R1cGxlcywgaW50IHVzZWRfYml0 cyk7CisJCQkJCQkJCQkgICBpbnQ2NCBpbnB1dF90dXBsZXMsIGRvdWJsZSBpbnB1dF9jYXJkLAor CQkJCQkJCQkJICAgaW50IHVzZWRfYml0cyk7CiBzdGF0aWMgTWluaW1hbFR1cGxlIGhhc2hhZ2df YmF0Y2hfcmVhZChIYXNoQWdnQmF0Y2ggKmJhdGNoLCB1aW50MzIgKmhhc2hwKTsKIHN0YXRpYyB2 b2lkIGhhc2hhZ2dfc3BpbGxfaW5pdChIYXNoQWdnU3BpbGwgKnNwaWxsLCBIYXNoVGFwZUluZm8g KnRhcGVpbmZvLAotCQkJCQkJCSAgIGludCB1c2VkX2JpdHMsIHVpbnQ2NCBpbnB1dF90dXBsZXMs CisJCQkJCQkJICAgaW50IHVzZWRfYml0cywgZG91YmxlIGlucHV0X2dyb3VwcywKIAkJCQkJCQkg ICBkb3VibGUgaGFzaGVudHJ5c2l6ZSk7CiBzdGF0aWMgU2l6ZSBoYXNoYWdnX3NwaWxsX3R1cGxl KEFnZ1N0YXRlICphZ2dzdGF0ZSwgSGFzaEFnZ1NwaWxsICpzcGlsbCwKIAkJCQkJCQkJVHVwbGVU YWJsZVNsb3QgKnNsb3QsIHVpbnQzMiBoYXNoKTsKQEAgLTE3NzUsNyArMTc4OCw3IEBAIGhhc2hh Z2dfcmVjb21waWxlX2V4cHJlc3Npb25zKEFnZ1N0YXRlICphZ2dzdGF0ZSwgYm9vbCBtaW5zbG90 LCBib29sIG51bGxjaGVjaykKICAqIHN1YnN0YW50aWFsbHkgbGFyZ2VyIHRoYW4gdGhlIGluaXRp YWwgdmFsdWUuCiAgKi8KIHZvaWQKLWhhc2hfYWdnX3NldF9saW1pdHMoZG91YmxlIGhhc2hlbnRy eXNpemUsIHVpbnQ2NCBpbnB1dF9ncm91cHMsIGludCB1c2VkX2JpdHMsCitoYXNoX2FnZ19zZXRf bGltaXRzKGRvdWJsZSBoYXNoZW50cnlzaXplLCBkb3VibGUgaW5wdXRfZ3JvdXBzLCBpbnQgdXNl ZF9iaXRzLAogCQkJCQlTaXplICptZW1fbGltaXQsIHVpbnQ2NCAqbmdyb3Vwc19saW1pdCwKIAkJ CQkJaW50ICpudW1fcGFydGl0aW9ucykKIHsKQEAgLTE5NjcsNyArMTk4MCw3IEBAIGhhc2hfY2hv b3NlX251bV9idWNrZXRzKGRvdWJsZSBoYXNoZW50cnlzaXplLCBsb25nIG5ncm91cHMsIFNpemUg bWVtb3J5KQogICogKmxvZzJfbnBhcnRpdGlvbnMgdG8gdGhlIGxvZzIoKSBvZiB0aGUgbnVtYmVy IG9mIHBhcnRpdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKLWhhc2hfY2hvb3NlX251bV9wYXJ0aXRp b25zKHVpbnQ2NCBpbnB1dF9ncm91cHMsIGRvdWJsZSBoYXNoZW50cnlzaXplLAoraGFzaF9jaG9v c2VfbnVtX3BhcnRpdGlvbnMoZG91YmxlIGlucHV0X2dyb3VwcywgZG91YmxlIGhhc2hlbnRyeXNp emUsCiAJCQkJCQkgICBpbnQgdXNlZF9iaXRzLCBpbnQgKmxvZzJfbnBhcnRpdGlvbnMpCiB7CiAJ U2l6ZQkJbWVtX3dhbnRlZDsKQEAgLTI1OTAsNyArMjYwMyw2IEBAIGFnZ19yZWZpbGxfaGFzaF90 YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAJSGFzaEFnZ0JhdGNoICpiYXRjaDsKIAlIYXNoQWdn U3BpbGwgc3BpbGw7CiAJSGFzaFRhcGVJbmZvICp0YXBlaW5mbyA9IGFnZ3N0YXRlLT5oYXNoX3Rh cGVpbmZvOwotCXVpbnQ2NAkJbmdyb3Vwc19lc3RpbWF0ZTsKIAlib29sCQlzcGlsbF9pbml0aWFs aXplZCA9IGZhbHNlOwogCiAJaWYgKGFnZ3N0YXRlLT5oYXNoX2JhdGNoZXMgPT0gTklMKQpAQCAt MjU5OSwxNiArMjYxMSw3IEBAIGFnZ19yZWZpbGxfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3Rh dGUpCiAJYmF0Y2ggPSBsaW5pdGlhbChhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzKTsKIAlhZ2dzdGF0 ZS0+aGFzaF9iYXRjaGVzID0gbGlzdF9kZWxldGVfZmlyc3QoYWdnc3RhdGUtPmhhc2hfYmF0Y2hl cyk7CiAKLQkvKgotCSAqIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgZ3JvdXBzIGZvciB0aGlzIGJh dGNoIGFzIHRoZSB0b3RhbCBudW1iZXIgb2YKLQkgKiB0dXBsZXMgaW4gaXRzIGlucHV0IGZpbGUu IEFsdGhvdWdoIHRoYXQncyBhIHdvcnN0IGNhc2UsIGl0J3Mgbm90IGJhZAotCSAqIGhlcmUgZm9y IHR3byByZWFzb25zOiAoMSkgb3ZlcmVzdGltYXRpbmcgaXMgYmV0dGVyIHRoYW4KLQkgKiB1bmRl cmVzdGltYXRpbmc7IGFuZCAoMikgd2UndmUgYWxyZWFkeSBzY2FubmVkIHRoZSByZWxhdGlvbiBv bmNlLCBzbwotCSAqIGl0J3MgbGlrZWx5IHRoYXQgd2UndmUgYWxyZWFkeSBmaW5hbGl6ZWQgbWFu eSBvZiB0aGUgY29tbW9uIHZhbHVlcy4KLQkgKi8KLQluZ3JvdXBzX2VzdGltYXRlID0gYmF0Y2gt PmlucHV0X3R1cGxlczsKLQotCWhhc2hfYWdnX3NldF9saW1pdHMoYWdnc3RhdGUtPmhhc2hlbnRy eXNpemUsIG5ncm91cHNfZXN0aW1hdGUsCisJaGFzaF9hZ2dfc2V0X2xpbWl0cyhhZ2dzdGF0ZS0+ aGFzaGVudHJ5c2l6ZSwgYmF0Y2gtPmlucHV0X2NhcmQsCiAJCQkJCQliYXRjaC0+dXNlZF9iaXRz LCAmYWdnc3RhdGUtPmhhc2hfbWVtX2xpbWl0LAogCQkJCQkJJmFnZ3N0YXRlLT5oYXNoX25ncm91 cHNfbGltaXQsIE5VTEwpOwogCkBAIC0yNjg1LDcgKzI2ODgsNyBAQCBhZ2dfcmVmaWxsX2hhc2hf dGFibGUoQWdnU3RhdGUgKmFnZ3N0YXRlKQogCQkJCSAqLwogCQkJCXNwaWxsX2luaXRpYWxpemVk ID0gdHJ1ZTsKIAkJCQloYXNoYWdnX3NwaWxsX2luaXQoJnNwaWxsLCB0YXBlaW5mbywgYmF0Y2gt PnVzZWRfYml0cywKLQkJCQkJCQkJICAgbmdyb3Vwc19lc3RpbWF0ZSwgYWdnc3RhdGUtPmhhc2hl bnRyeXNpemUpOworCQkJCQkJCQkgICBiYXRjaC0+aW5wdXRfY2FyZCwgYWdnc3RhdGUtPmhhc2hl bnRyeXNpemUpOwogCQkJfQogCQkJLyogbm8gbWVtb3J5IGZvciBhIG5ldyBncm91cCwgc3BpbGwg Ki8KIAkJCWhhc2hhZ2dfc3BpbGxfdHVwbGUoYWdnc3RhdGUsICZzcGlsbCwgc2xvdCwgaGFzaCk7 CkBAIC0yOTQxLDcgKzI5NDQsNyBAQCBoYXNoYWdnX3RhcGVpbmZvX3JlbGVhc2UoSGFzaFRhcGVJ bmZvICp0YXBlaW5mbywgaW50IHRhcGVudW0pCiAgKi8KIHN0YXRpYyB2b2lkCiBoYXNoYWdnX3Nw aWxsX2luaXQoSGFzaEFnZ1NwaWxsICpzcGlsbCwgSGFzaFRhcGVJbmZvICp0YXBlaW5mbywgaW50 IHVzZWRfYml0cywKLQkJCQkgICB1aW50NjQgaW5wdXRfZ3JvdXBzLCBkb3VibGUgaGFzaGVudHJ5 c2l6ZSkKKwkJCQkgICBkb3VibGUgaW5wdXRfZ3JvdXBzLCBkb3VibGUgaGFzaGVudHJ5c2l6ZSkK IHsKIAlpbnQJCQlucGFydGl0aW9uczsKIAlpbnQJCQlwYXJ0aXRpb25fYml0czsKQEAgLTI5NTEs NiArMjk1NCw3IEBAIGhhc2hhZ2dfc3BpbGxfaW5pdChIYXNoQWdnU3BpbGwgKnNwaWxsLCBIYXNo VGFwZUluZm8gKnRhcGVpbmZvLCBpbnQgdXNlZF9iaXRzLAogCiAJc3BpbGwtPnBhcnRpdGlvbnMg PSBwYWxsb2MwKHNpemVvZihpbnQpICogbnBhcnRpdGlvbnMpOwogCXNwaWxsLT5udHVwbGVzID0g cGFsbG9jMChzaXplb2YoaW50NjQpICogbnBhcnRpdGlvbnMpOworCXNwaWxsLT5obGxfY2FyZCA9 IHBhbGxvYzAoc2l6ZW9mKGh5cGVyTG9nTG9nU3RhdGUpICogbnBhcnRpdGlvbnMpOwogCiAJaGFz aGFnZ190YXBlaW5mb19hc3NpZ24odGFwZWluZm8sIHNwaWxsLT5wYXJ0aXRpb25zLCBucGFydGl0 aW9ucyk7CiAKQEAgLTI5NTgsNiArMjk2Miw5IEBAIGhhc2hhZ2dfc3BpbGxfaW5pdChIYXNoQWdn U3BpbGwgKnNwaWxsLCBIYXNoVGFwZUluZm8gKnRhcGVpbmZvLCBpbnQgdXNlZF9iaXRzLAogCXNw aWxsLT5zaGlmdCA9IDMyIC0gdXNlZF9iaXRzIC0gcGFydGl0aW9uX2JpdHM7CiAJc3BpbGwtPm1h c2sgPSAobnBhcnRpdGlvbnMgLSAxKSA8PCBzcGlsbC0+c2hpZnQ7CiAJc3BpbGwtPm5wYXJ0aXRp b25zID0gbnBhcnRpdGlvbnM7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5wYXJ0aXRpb25zOyBp KyspCisJCWluaXRIeXBlckxvZ0xvZygmc3BpbGwtPmhsbF9jYXJkW2ldLCBIQVNIQUdHX0hMTF9C SVRfV0lEVEgpOwogfQogCiAvKgpAQCAtMzAwNiw2ICszMDEzLDEzIEBAIGhhc2hhZ2dfc3BpbGxf dHVwbGUoQWdnU3RhdGUgKmFnZ3N0YXRlLCBIYXNoQWdnU3BpbGwgKnNwaWxsLAogCXBhcnRpdGlv biA9IChoYXNoICYgc3BpbGwtPm1hc2spID4+IHNwaWxsLT5zaGlmdDsKIAlzcGlsbC0+bnR1cGxl c1twYXJ0aXRpb25dKys7CiAKKwkvKgorCSAqIEFsbCBoYXNoIHZhbHVlcyBkZXN0aW5lZCBmb3Ig YSBnaXZlbiBwYXJ0aXRpb24gaGF2ZSBzb21lIGJpdHMgaW4KKwkgKiBjb21tb24sIHdoaWNoIGNh dXNlcyBiYWQgSExMIGNhcmRpbmFsaXR5IGVzdGltYXRlcy4gSGFzaCB0aGUgaGFzaCB0bworCSAq IGdldCBhIG1vcmUgdW5pZm9ybSBkaXN0cmlidXRpb24uCisJICovCisJYWRkSHlwZXJMb2dMb2co JnNwaWxsLT5obGxfY2FyZFtwYXJ0aXRpb25dLCBoYXNoX2J5dGVzX3VpbnQzMihoYXNoKSk7CisK IAl0YXBlbnVtID0gc3BpbGwtPnBhcnRpdGlvbnNbcGFydGl0aW9uXTsKIAogCUxvZ2ljYWxUYXBl V3JpdGUodGFwZXNldCwgdGFwZW51bSwgKHZvaWQgKikgJmhhc2gsIHNpemVvZih1aW50MzIpKTsK QEAgLTMwMjgsNyArMzA0Miw3IEBAIGhhc2hhZ2dfc3BpbGxfdHVwbGUoQWdnU3RhdGUgKmFnZ3N0 YXRlLCBIYXNoQWdnU3BpbGwgKnNwaWxsLAogICovCiBzdGF0aWMgSGFzaEFnZ0JhdGNoICoKIGhh c2hhZ2dfYmF0Y2hfbmV3KExvZ2ljYWxUYXBlU2V0ICp0YXBlc2V0LCBpbnQgdGFwZW51bSwgaW50 IHNldG5vLAotCQkJCSAgaW50NjQgaW5wdXRfdHVwbGVzLCBpbnQgdXNlZF9iaXRzKQorCQkJCSAg aW50NjQgaW5wdXRfdHVwbGVzLCBkb3VibGUgaW5wdXRfY2FyZCwgaW50IHVzZWRfYml0cykKIHsK IAlIYXNoQWdnQmF0Y2ggKmJhdGNoID0gcGFsbG9jMChzaXplb2YoSGFzaEFnZ0JhdGNoKSk7CiAK QEAgLTMwMzcsNiArMzA1MSw3IEBAIGhhc2hhZ2dfYmF0Y2hfbmV3KExvZ2ljYWxUYXBlU2V0ICp0 YXBlc2V0LCBpbnQgdGFwZW51bSwgaW50IHNldG5vLAogCWJhdGNoLT50YXBlc2V0ID0gdGFwZXNl dDsKIAliYXRjaC0+aW5wdXRfdGFwZW51bSA9IHRhcGVudW07CiAJYmF0Y2gtPmlucHV0X3R1cGxl cyA9IGlucHV0X3R1cGxlczsKKwliYXRjaC0+aW5wdXRfY2FyZCA9IGlucHV0X2NhcmQ7CiAKIAly ZXR1cm4gYmF0Y2g7CiB9CkBAIC0zMTQwLDIxICszMTU1LDI2IEBAIGhhc2hhZ2dfc3BpbGxfZmlu aXNoKEFnZ1N0YXRlICphZ2dzdGF0ZSwgSGFzaEFnZ1NwaWxsICpzcGlsbCwgaW50IHNldG5vKQog CiAJZm9yIChpID0gMDsgaSA8IHNwaWxsLT5ucGFydGl0aW9uczsgaSsrKQogCXsKLQkJaW50CQkJ dGFwZW51bSA9IHNwaWxsLT5wYXJ0aXRpb25zW2ldOwotCQlIYXNoQWdnQmF0Y2ggKm5ld19iYXRj aDsKKwkJaW50CQkJCSB0YXBlbnVtID0gc3BpbGwtPnBhcnRpdGlvbnNbaV07CisJCUhhc2hBZ2dC YXRjaAkqbmV3X2JhdGNoOworCQlkb3VibGUJCQkgY2FyZGluYWxpdHk7CiAKIAkJLyogaWYgdGhl IHBhcnRpdGlvbiBpcyBlbXB0eSwgZG9uJ3QgY3JlYXRlIGEgbmV3IGJhdGNoIG9mIHdvcmsgKi8K IAkJaWYgKHNwaWxsLT5udHVwbGVzW2ldID09IDApCiAJCQljb250aW51ZTsKIAorCQljYXJkaW5h bGl0eSA9IGVzdGltYXRlSHlwZXJMb2dMb2coJnNwaWxsLT5obGxfY2FyZFtpXSk7CisJCWZyZWVI eXBlckxvZ0xvZygmc3BpbGwtPmhsbF9jYXJkW2ldKTsKKwogCQluZXdfYmF0Y2ggPSBoYXNoYWdn X2JhdGNoX25ldyhhZ2dzdGF0ZS0+aGFzaF90YXBlaW5mby0+dGFwZXNldCwKIAkJCQkJCQkJCSAg dGFwZW51bSwgc2V0bm8sIHNwaWxsLT5udHVwbGVzW2ldLAotCQkJCQkJCQkJICB1c2VkX2JpdHMp OworCQkJCQkJCQkJICBjYXJkaW5hbGl0eSwgdXNlZF9iaXRzKTsKIAkJYWdnc3RhdGUtPmhhc2hf YmF0Y2hlcyA9IGxjb25zKG5ld19iYXRjaCwgYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyk7CiAJCWFn Z3N0YXRlLT5oYXNoX2JhdGNoZXNfdXNlZCsrOwogCX0KIAogCXBmcmVlKHNwaWxsLT5udHVwbGVz KTsKKwlwZnJlZShzcGlsbC0+aGxsX2NhcmQpOwogCXBmcmVlKHNwaWxsLT5wYXJ0aXRpb25zKTsK IH0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5oIGIvc3JjL2lu Y2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5oCmluZGV4IGJiMDgwNWFiZTA5Li5iOTU1MTY5NTM4NCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5oCisrKyBiL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL25vZGVBZ2cuaApAQCAtMzIwLDcgKzMyMCw3IEBAIGV4dGVybiB2b2lkIEV4 ZWNSZVNjYW5BZ2coQWdnU3RhdGUgKm5vZGUpOwogCiBleHRlcm4gU2l6ZSBoYXNoX2FnZ19lbnRy eV9zaXplKGludCBudW1UcmFucywgU2l6ZSB0dXBsZVdpZHRoLAogCQkJCQkJCQlTaXplIHRyYW5z aXRpb25TcGFjZSk7Ci1leHRlcm4gdm9pZCBoYXNoX2FnZ19zZXRfbGltaXRzKGRvdWJsZSBoYXNo ZW50cnlzaXplLCB1aW50NjQgaW5wdXRfZ3JvdXBzLAorZXh0ZXJuIHZvaWQgaGFzaF9hZ2dfc2V0 X2xpbWl0cyhkb3VibGUgaGFzaGVudHJ5c2l6ZSwgZG91YmxlIGlucHV0X2dyb3VwcywKIAkJCQkJ CQkJaW50IHVzZWRfYml0cywgU2l6ZSAqbWVtX2xpbWl0LAogCQkJCQkJCQl1aW50NjQgKm5ncm91 cHNfbGltaXQsIGludCAqbnVtX3BhcnRpdGlvbnMpOwogCi0tIAoyLjE3LjEKCg== --=-omq7CAa1EedIK3tBcFn2--