From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6D009C61DBD for ; Wed, 26 Aug 2026 02:03:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.sourceforge.net; s=beta; h=Content-Transfer-Encoding:Content-Type:Cc: Reply-To:From:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Subject:In-Reply-To:References:To:MIME-Version:Date: Message-ID:Sender:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Xd3JEH665mJSNVkbYXffHOIZ55OqEqfdWQNLPrwCzJM=; b=faAXfOGv8if18YdlsXYveVvHx6 IZo3u0AfVXoqDUNM0+SP4sjzwdDtYchDTgNQ3bSz8Dqf0M1MIwhRX/uAtTQmt0aatp8U2/ZOJarqX 8f10Bz7SlInHiDR8u0OmEpcVtCRLoWvmdiBbNz9wC7ZuXqtDmtP/Dr20Go6+epa4B/vI=; Received: from [127.0.0.1] (helo=sfs-ml-3.v29.lw.sourceforge.com) by sfs-ml-3.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1wz2zN-0001r1-RO; Wed, 26 Aug 2026 02:03:42 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-3.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1wz2z0-0001qi-ND for linux-f2fs-devel@lists.sourceforge.net; Wed, 26 Aug 2026 02:03:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:Content-Type:In-Reply-To: From:References:To:Subject:Cc:MIME-Version:Date:Message-ID:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=tBzUdJeSdTzGaRI5If1BMgwks/AwJh7GQ1o3WyB/F7k=; b=DSZXlxoeAjAku/U+UPHshQNUUS kwn3bmYEWn1lo/FThClKIR1Uu0TzVhSYyzJbnyT/lFQKt57le7B9LuCOqO/mCqAQ4GsFYuODFDOEk 1G/PTdXVgUTTyE73DEKS36A2nFTJ9V4YYazIhKbRrJBfd87b1OWYPwXGMXv+8qbiDEAM=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:From:References:To: Subject:Cc:MIME-Version:Date:Message-ID:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=tBzUdJeSdTzGaRI5If1BMgwks/AwJh7GQ1o3WyB/F7k=; b=atrs1CQ/CxFUZe57dGZw+xvEez dJ9PKS5DJibiH6pM5XAZxfDPVnTDckIiH9TJ3aof9I4sa+3G3/w0NZGnhv9VBHyt1KEYg33DIOqaC qiyFT4YEOMA0XOmYfHNrvFdq3FJiYjA5ohv5Ar3ESSBgf367EVrStVsUqQpS7SSjbBsQ=; Received: from tor.source.kernel.org ([172.105.4.254]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1wz2yz-0001CH-GU for linux-f2fs-devel@lists.sourceforge.net; Wed, 26 Aug 2026 02:03:19 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 390CA600C4; Wed, 26 Aug 2026 02:03:11 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DA0261F000E9; Wed, 26 Aug 2026 02:03:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1787709790; bh=tBzUdJeSdTzGaRI5If1BMgwks/AwJh7GQ1o3WyB/F7k=; h=Date:Cc:Subject:To:References:From:In-Reply-To; b=dRGOmqFV/IspwmnGZ+mvilwH5kwyM9+XzOMHEv7wbIfveOCCXU1TYKKM/8mIdWqh0 R51YREqFQ79gNeVej1ecyFCg1Ilhw6bL19kr4owc8FzU2MnPLi1+YBQ0PUrQZ3iLCa T8YBUZWShlF83CmGXMFcO+X71V+rZ9h2OE+VN4FIT39D/CdxNM7idoHUVBshJMxiMR 1Fw/9MstmH9OVK8mj+7R3p/iDXnykNdvSR7wYsPsZ1vX4itDb0yT9Zq5YuVrVIDr9/ EoGSphFkzcdpLt1xE0ci+Xirpb3vQp1gScaE/ZO/luM3DEV7Ikny23StOvRHm+qith FioCs+qN5a6dw== Message-ID: <7b1ca156-316d-428c-9a8b-4fe55eb9cbfd@kernel.org> Date: Wed, 26 Aug 2026 10:03:08 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Daeho Jeong References: <20260824191404.2558269-1-daeho43@gmail.com> <093eae1e-f533-404c-b8da-f5025d4e3db2@kernel.org> Content-Language: en-US In-Reply-To: X-Headers-End: 1wz2yz-0001CH-GU Subject: Re: [f2fs-dev] [PATCH] f2fs: support resizable tail section and unify pinned allocation X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Chao Yu via Linux-f2fs-devel Reply-To: Chao Yu Cc: Daeho Jeong , kernel-team@android.com, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net T24gOC8yNi8yNiAwMDoxNCwgRGFlaG8gSmVvbmcgd3JvdGU6Cj4gT24gTW9uLCBBdWcgMjQsIDIw MjYgYXQgODoxNuKAr1BNIENoYW8gWXUgPGNoYW9Aa2VybmVsLm9yZz4gd3JvdGU6Cj4+Cj4+IE9u IDgvMjUvMjYgMDM6MTQsIERhZWhvIEplb25nIHdyb3RlOgo+Pj4gRnJvbTogRGFlaG8gSmVvbmcg PGRhZWhvamVvbmdAZ29vZ2xlLmNvbT4KPj4+Cj4+PiBDdXJyZW50bHksIHpvbmVkIGJsb2NrIGRl dmljZXMgcmVzdHJpY3QgcGlubmVkIGZpbGUgYWxsb2NhdGlvbnMgdG8KPj4+IGNvbnZlbnRpb25h bCB6b25lcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdG9yYWdlIChiZWZvcmUKPj4+IGZpcnN0 X3NlcV96b25lX3NlZ25vKSwgdHJpZ2dlcmluZyByYW5nZSBHQyB3aGVuIGNvbnZlbnRpb25hbCBz cGFjZSBpcwo+Pj4gZXhoYXVzdGVkLgo+Pj4KPj4+IE9uIHJlZ3VsYXIgYmxvY2sgZGV2aWNlcywg d2hlbiBwcmVwYXJpbmcgZm9yIGZ1dHVyZSBvbmxpbmUgZmlsZXN5c3RlbQo+Pj4gcmVzaXppbmcg KGUuZy4gcGFydGl0aW9uIHNocmlua2luZyksIHBpbm5lZCBmaWxlcyBtdXN0IG5vdCBiZSBhbGxv Y2F0ZWQKPj4+IGluIHRoZSB0YWlsIGFyZWEgdGhhdCB3aWxsIGJlIHRydW5jYXRlZCwgYXMgcGlu bmVkIGZpbGVzIGNhbm5vdCBiZQo+Pj4gcmVsb2NhdGVkIGJ5IEdDLiBTcGVjaWZ5aW5nIHRoZSBy ZXNpemFibGUgdGFpbCBhcmVhIHNpemUgKGluIHNlY3Rpb25zKQo+Pj4gYWxsb3dzIHVuaWZvcm0g bW91bnQgY29uZmlndXJhdGlvbiBhY3Jvc3MgZGV2aWNlcyBvZiBkaWZmZXJlbnQgc3RvcmFnZQo+ Pj4gY2FwYWNpdGllcy4KPj4+Cj4+PiBUbyBzdXBwb3J0IHRoaXMsIGludHJvZHVjZSBhIHVuaWZp ZWQgYHBpbm5lZF9hcmVhX21heF9zZWNub2AgYm91bmRhcnkKPj4+IGFic3RyYWN0aW9uIGluIGBm MmZzX3NiX2luZm9gOgo+Pj4gMS4gQWRkIGAtbyByZXNpemFibGVfdGFpbF9zZWNubz0ldWAgbW91 bnQgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIG51bWJlcgo+Pj4gICAgIG9mIHNlY3Rpb25zIGF0IHRo ZSB0YWlsIG9mIHRoZSBmaWxlc3lzdGVtIHJlc2VydmVkIGZvciByZXNpemluZy4KPj4+IDIuIElu IGBmMmZzX2ZpbGxfc3VwZXIoKWAsIGluaXRpYWxpemUgYHNiaS0+cGlubmVkX2FyZWFfbWF4X3Nl Y25vYCBhczoKPj4+ICAgICBtaW4oTUFJTl9TRUNTKHNiaSkgLSByZXNpemFibGVfdGFpbF9zZWMs IHpvbmVkX21heF9zZWMpLgo+Pj4gMy4gSW4gYGdldF9uZXdfc2VnbWVudCgpYCwgcmVzdHJpY3Qg c2VnbWVudCBhbGxvY2F0aW9uIGZvciBwaW5uZWQgZmlsZXMKPj4+ICAgICAoYHBpbm5pbmcgPT0g dHJ1ZWApIHRvIGAwIC4uIHNiaS0+cGlubmVkX2FyZWFfbWF4X3NlY25vIC0gMWAuIElmIG5vCj4+ PiAgICAgZnJlZSBzZWN0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgcGlubmVkIGFyZWEsIHJldHVy biAtRUFHQUlOLgo+Pj4gNC4gSW4gYGYyZnNfYWxsb2NhdGVfcGlubmluZ19zZWN0aW9uKClgLCB1 bmlmeSB0aGUgcmFuZ2UgR0MgdHJpZ2dlciB0bwo+Pj4gICAgIHJ1biBgZjJmc19nY19yYW5nZSgp YCB1cCB0byBgc2JpLT5waW5uZWRfYXJlYV9tYXhfc2Vjbm9gIHdoZW5ldmVyCj4+PiAgICAgYHNi aS0+cGlubmVkX2FyZWFfbWF4X3NlY25vIDwgTUFJTl9TRUNTKHNiaSlgIGFuZCBhbGxvY2F0aW9u Cj4+PiAgICAgcmV0dXJucyAtRUFHQUlOLgo+Pj4gNS4gRXhwb3NlIGAvc3lzL2ZzL2YyZnMvPGRl dj4vcGlubmVkX2FyZWFfbWF4X3NlY25vYCBhcyBhIHJlYWQtb25seQo+Pj4gICAgIHN5c2ZzIG5v ZGUuCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogRGFlaG8gSmVvbmcgPGRhZWhvamVvbmdAZ29vZ2xl LmNvbT4KPj4+IFNpZ25lZC1vZmYtYnk6IFN1bm1pbiBKZW9uZyA8c19taW4uamVvbmdAc2Ftc3Vu Zy5jb20+Cj4+PiAtLS0KPj4+ICAgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1mcy1m MmZzIHwgIDcgKysrKysKPj4+ICAgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mMmZzLnJzdCAg ICAgIHwgIDggKysrKystCj4+PiAgIGZzL2YyZnMvZjJmcy5oICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAyICsrCj4+PiAgIGZzL2YyZnMvc2VnbWVudC5jICAgICAgICAgICAgICAgICAgICAg ICB8IDMzICsrKysrKysrKysrKy0tLS0tLS0tLS0tCj4+PiAgIGZzL2YyZnMvc2VnbWVudC5oICAg ICAgICAgICAgICAgICAgICAgICB8ICAxICsKPj4+ICAgZnMvZjJmcy9zdXBlci5jICAgICAgICAg ICAgICAgICAgICAgICAgIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4gICBmcy9m MmZzL3N5c2ZzLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArKwo+Pj4gICA3IGZpbGVz IGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYg LS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWZzLWYyZnMgYi9Eb2N1bWVu dGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWZzLWYyZnMKPj4+IGluZGV4IDg1MTk0ZTRjN2YwMS4u MGNlYmM4OTc5OWRkIDEwMDY0NAo+Pj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9z eXNmcy1mcy1mMmZzCj4+PiArKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWZz LWYyZnMKPj4+IEBAIC0xMDEzLDMgKzEwMTMsMTAgQEAgRGVzY3JpcHRpb246ICAgRXZlcnkgdGlt ZSBhIHdyaXRlIG9wZXJhdGlvbiBjb21wbGV0ZXMgZjJmc193cml0ZV9lbmRfaW8oKSBpcwo+Pj4g ICAgICAgICAgICAgICB0aGUgbWF4aW11bSBzaXplIG9mIGEgd3JpdGUgYmlvIHRoYXQgaXMgY29t cGxldGVkIGluIGF0b21pYwo+Pj4gICAgICAgICAgICAgICAoYXRjKSBjb250ZXh0LiBUaGUgZGVm YXVsdCB2YWx1ZSBmb3IgdGhpcyBhdHRyaWJ1dGUgaXMgVUlOVF9NQVgKPj4+ICAgICAgICAgICAg ICAgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQgYnkgZGVm YXVsdC4KPj4+ICsKPj4+ICtXaGF0OiAgICAgICAgICAgICAgICAvc3lzL2ZzL2YyZnMvPGRpc2s+ L3Bpbm5lZF9hcmVhX21heF9zZWNubwo+Pj4gK0RhdGU6ICAgICAgICAgICAgICAgIEF1Z3VzdCAy MDI2Cj4+PiArQ29udGFjdDogICAgICJEYWVobyBKZW9uZyIgPGRhZWhvamVvbmdAZ29vZ2xlLmNv bT4KPj4+ICtEZXNjcmlwdGlvbjogVGhpcyBpcyBhIHJlYWQtb25seSBlbnRyeSB0byBzaG93IHRo ZSB1cHBlciBib3VuZCBzZWN0aW9uIG51bWJlcgo+Pj4gKyAgICAgICAgICAgICBmb3IgcGlubmVk IGZpbGVzLiBQaW5uZWQgZmlsZXMgd2lsbCBvbmx5IGJlIGFsbG9jYXRlZCB3aXRoaW4KPj4+ICsg ICAgICAgICAgICAgc2VjdGlvbnMgMCB0byBwaW5uZWRfYXJlYV9tYXhfc2Vjbm8gLSAxLgo+Pj4g ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZjJmcy5yc3QgYi9Eb2N1bWVu dGF0aW9uL2ZpbGVzeXN0ZW1zL2YyZnMucnN0Cj4+PiBpbmRleCAxYTVmZDRhZmU2MDkuLmEzYzNi Njk0ODczNCAxMDA2NDQKPj4+IC0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZjJmcy5y c3QKPj4+ICsrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZjJmcy5yc3QKPj4+IEBAIC00 MTcsNyArNDE3LDEzIEBAIGxvb2t1cF9tb2RlPSVzICAgICAgICAgICAgQ29udHJvbCB0aGUgZGly ZWN0b3J5IGxvb2t1cCBiZWhhdmlvciBmb3IgY2FzZWZvbGRlZAo+Pj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXV0byAgICAgICAgICAgICAgIEYyRlMgZGV0ZXJtaW5lcyB0aGUgbW9kZSBi YXNlZCBvbiB0aGUKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvbi1kaXNrIGBTQl9FTkNfTk9fQ09NUEFUX0ZBTExCQUNLX0ZMYAo+Pj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcuCj4+PiAtICAgICAgICAg ICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQo+Pj4gK3Jlc2l6YWJsZV90YWlsX3NlY25vPSV1ICBDb250cm9s IHRoZSBudW1iZXIgb2Ygc2VjdGlvbnMgYXQgdGhlIHRhaWwgb2YgdGhlCj4+PiArICAgICAgICAg ICAgICAgICAgICAgIGZpbGVzeXN0ZW0gcmVzZXJ2ZWQgZm9yIG9ubGluZSByZXNpemluZy4gUGlu bmVkIGZpbGVzCj4+PiArICAgICAgICAgICAgICAgICAgICAgIHdpbGwgb25seSBiZSBhbGxvY2F0 ZWQgd2l0aGluIHNlY3Rpb25zIDAgdG8KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgKE1BSU5f U0VDUyAtIHJlc2l6YWJsZV90YWlsX3NlY25vKSAtIDEuIElmIHNldCB0byAwCj4+PiArICAgICAg ICAgICAgICAgICAgICAgIChkZWZhdWx0KSwgdGhlcmUgaXMgbm8gdGFpbCByZXN0cmljdGlvbiB1 bmxlc3MgcnVubmluZwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICBvbiBhIHpvbmVkIGJsb2Nr IGRldmljZSB3aGVyZSBjb252ZW50aW9uYWwgem9uZXMgYXJlCj4+PiArICAgICAgICAgICAgICAg ICAgICAgIHVzZWQuCj4+PiAgID09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPj4+Cj4+PiAg IERlYnVnZnMgRW50cmllcwo+Pj4gZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZjJmcy5oIGIvZnMvZjJm cy9mMmZzLmgKPj4+IGluZGV4IGIwYTljMTRkZTU5NS4uMTY3MjBmMWYwYTljIDEwMDY0NAo+Pj4g LS0tIGEvZnMvZjJmcy9mMmZzLmgKPj4+ICsrKyBiL2ZzL2YyZnMvZjJmcy5oCj4+PiBAQCAtMjU1 LDYgKzI1NSw3IEBAIHN0cnVjdCBmMmZzX21vdW50X2luZm8gewo+Pj4gICAgICAgYmxvY2tfdCB1 bnVzYWJsZV9jYXA7ICAgICAgICAgICAvKiBBbW91bnQgb2Ygc3BhY2UgYWxsb3dlZCB0byBiZQo+ Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB1bnVzYWJsZSB3aGVu IGRpc2FibGluZyBjaGVja3BvaW50Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqLwo+Pj4gKyAgICAgdW5zaWduZWQgaW50IHJlc2l6YWJsZV90YWlsX3NlY25vOyAg ICAgIC8qIG51bWJlciBvZiByZXNpemFibGUgdGFpbCBzZWN0aW9ucyAqLwo+Pj4KPj4+ICAgICAg IC8qIEZvciBjb21wcmVzc2lvbiAqLwo+Pj4gICAgICAgdW5zaWduZWQgY2hhciBjb21wcmVzc19h bGdvcml0aG07ICAgICAgIC8qIGFsZ29yaXRobSB0eXBlICovCj4+PiBAQCAtMjAwNSw2ICsyMDA2 LDcgQEAgc3RydWN0IGYyZnNfc2JfaW5mbyB7Cj4+PiAgICAgICBzcGlubG9ja190IGRldl9sb2Nr OyAgICAgICAgICAgICAgICAgICAgLyogcHJvdGVjdCBkaXJ0eV9kZXZpY2UgKi8KPj4+ICAgICAg IGJvb2wgYWxpZ25lZF9ibGtzaXplOyAgICAgICAgICAgICAgICAgICAvKiBhbGwgZGV2aWNlcyBo YXMgdGhlIHNhbWUgbG9naWNhbCBibGtzaXplICovCj4+PiAgICAgICB1bnNpZ25lZCBpbnQgZmly c3Rfc2VxX3pvbmVfc2Vnbm87ICAgICAgLyogZmlyc3Qgc2Vnbm8gaW4gc2VxdWVudGlhbCB6b25l ICovCj4+PiArICAgICB1bnNpZ25lZCBpbnQgcGlubmVkX2FyZWFfbWF4X3NlY25vOyAgICAgLyog dXBwZXIgYm91bmQgc2VjdGlvbiBmb3IgcGlubmVkIGZpbGVzICovCj4+PiAgICAgICB1bnNpZ25l ZCBpbnQgYmdnY19pb19hd2FyZTsgICAgICAgICAgICAgLyogRm9yIGFkanVzdCB0aGUgQkdfR0Mg cHJpb3JpdHkgd2hlbiBwZW5kaW5nIElPICovCj4+PiAgICAgICB1bnNpZ25lZCBpbnQgYWxsb2Nh dGVfc2VjdGlvbl9oaW50OyAgICAgLyogdGhlIGJvdW5kYXJ5IHBvc2l0aW9uIGJldHdlZW4gZGV2 aWNlcyAqLwo+Pj4gICAgICAgdW5zaWduZWQgaW50IGFsbG9jYXRlX3NlY3Rpb25fcG9saWN5OyAg IC8qIGRldGVybWluZSB0aGUgc2VjdGlvbiB3cml0aW5nIHByaW9yaXR5ICovCj4+PiBkaWZmIC0t Z2l0IGEvZnMvZjJmcy9zZWdtZW50LmMgYi9mcy9mMmZzL3NlZ21lbnQuYwo+Pj4gaW5kZXggNTZk ZWNmOWM2OTFjLi5lZDZmMjk0NzIxMGIgMTAwNjQ0Cj4+PiAtLS0gYS9mcy9mMmZzL3NlZ21lbnQu Ywo+Pj4gKysrIGIvZnMvZjJmcy9zZWdtZW50LmMKPj4+IEBAIC0yODc3LDYgKzI4NzcsNyBAQCBz dGF0aWMgaW50IGdldF9uZXdfc2VnbWVudChzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksCj4+PiAg ICAgICB1bnNpZ25lZCBpbnQgb2xkX3pvbmVubyA9IEdFVF9aT05FX0ZST01fU0VHKHNiaSwgKm5l d3NlZyk7Cj4+PiAgICAgICB1bnNpZ25lZCBpbnQgYWxsb2NfcG9saWN5ID0gc2JpLT5hbGxvY2F0 ZV9zZWN0aW9uX3BvbGljeTsKPj4+ICAgICAgIHVuc2lnbmVkIGludCBhbGxvY19oaW50ID0gc2Jp LT5hbGxvY2F0ZV9zZWN0aW9uX2hpbnQ7Cj4+PiArICAgICB1bnNpZ25lZCBpbnQgbWF4X3NlY25v ID0gTUFJTl9TRUNTKHNiaSk7Cj4+PiAgICAgICBib29sIGluaXQgPSB0cnVlOwo+Pj4gICAgICAg Ym9vbCBsb29wZWQgPSBmYWxzZTsKPj4+ICAgICAgIGludCBpLCBkZXZpOwo+Pj4gQEAgLTI5MDgs NyArMjkwOSw3IEBAIHN0YXRpYyBpbnQgZ2V0X25ld19zZWdtZW50KHN0cnVjdCBmMmZzX3NiX2lu Zm8gKnNiaSwKPj4+ICAgICAgICAqLwo+Pj4gICAgICAgaWYgKGYyZnNfc2JfaGFzX2Jsa3pvbmVk KHNiaSkpIHsKPj4+ICAgICAgICAgICAgICAgLyogUHJpb3JpdGl6ZSB3cml0aW5nIHRvIGNvbnZl bnRpb25hbCB6b25lcyAqLwo+Pj4gLSAgICAgICAgICAgICBpZiAoc2JpLT5ibGt6b25lX2FsbG9j X3BvbGljeSA9PSBCTEtaT05FX0FMTE9DX1BSSU9SX0NPTlYgfHwgcGlubmluZykKPj4+ICsgICAg ICAgICAgICAgaWYgKHNiaS0+Ymxrem9uZV9hbGxvY19wb2xpY3kgPT0gQkxLWk9ORV9BTExPQ19Q UklPUl9DT05WKQo+Pj4gICAgICAgICAgICAgICAgICAgICAgIHNlZ25vID0gMDsKPj4+ICAgICAg ICAgICAgICAgZWxzZQo+Pj4gICAgICAgICAgICAgICAgICAgICAgIHNlZ25vID0gbWF4KHNiaS0+ Zmlyc3Rfc2VxX3pvbmVfc2Vnbm8sICpuZXdzZWcpOwo+Pj4gQEAgLTI5MjQsMTkgKzI5MjUsMjQg QEAgc3RhdGljIGludCBnZXRfbmV3X3NlZ21lbnQoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLAo+ Pj4gICAgICAgICAgICAgICBhbGxvY19oaW50ID4gTUFJTl9TRUNTKHNiaSkpCj4+PiAgICAgICAg ICAgICAgIGFsbG9jX2hpbnQgPSBNQUlOX1NFQ1Moc2JpKTsKPj4+Cj4+PiAtICAgICBpZiAoYWxs b2NfcG9saWN5ID09IEFMTE9DQVRFX0ZPUldBUkRfRlJPTV9ISU5UICYmCj4+PiAtICAgICAgICAg ICAgIGhpbnQgPCBhbGxvY19oaW50KQo+Pj4gKyAgICAgaWYgKHBpbm5pbmcpIHsKPj4+ICsgICAg ICAgICAgICAgbWF4X3NlY25vID0gc2JpLT5waW5uZWRfYXJlYV9tYXhfc2Vjbm87Cj4+PiArICAg ICAgICAgICAgIGhpbnQgPSAwOwo+Pj4gKyAgICAgfSBlbHNlIGlmIChhbGxvY19wb2xpY3kgPT0g QUxMT0NBVEVfRk9SV0FSRF9GUk9NX0hJTlQgJiYKPj4+ICsgICAgICAgICAgICAgaGludCA8IGFs bG9jX2hpbnQpIHsKPj4+ICAgICAgICAgICAgICAgaGludCA9IGFsbG9jX2hpbnQ7Cj4+PiAtICAg ICBlbHNlIGlmIChhbGxvY19wb2xpY3kgPT0gQUxMT0NBVEVfRk9SV0FSRF9XSVRISU5fSElOVCAm Jgo+Pj4gLSAgICAgICAgICAgICAgICAgICAgIGhpbnQgPj0gYWxsb2NfaGludCkKPj4+ICsgICAg IH0gZWxzZSBpZiAoYWxsb2NfcG9saWN5ID09IEFMTE9DQVRFX0ZPUldBUkRfV0lUSElOX0hJTlQg JiYKPj4+ICsgICAgICAgICAgICAgICAgICAgICBoaW50ID49IGFsbG9jX2hpbnQpIHsKPj4+ICAg ICAgICAgICAgICAgaGludCA9IDA7Cj4+PiArICAgICB9Cj4+Pgo+Pj4gICBmaW5kX290aGVyX3pv bmU6Cj4+PiAtICAgICBzZWNubyA9IGZpbmRfbmV4dF96ZXJvX2JpdChmcmVlX2ktPmZyZWVfc2Vj bWFwLCBNQUlOX1NFQ1Moc2JpKSwgaGludCk7Cj4+PiArICAgICBzZWNubyA9IGZpbmRfbmV4dF96 ZXJvX2JpdChmcmVlX2ktPmZyZWVfc2VjbWFwLCBtYXhfc2Vjbm8sIGhpbnQpOwo+Pj4KPj4+IC0g ICAgIGlmIChzZWNubyA+PSBNQUlOX1NFQ1Moc2JpKSkgewo+Pj4gKyAgICAgaWYgKHNlY25vID49 IG1heF9zZWNubykgewo+Pj4gICAgICAgICAgICAgICBpZiAobG9vcGVkKSB7Cj4+PiAtICAgICAg ICAgICAgICAgICAgICAgcmV0ID0gLUVOT1NQQzsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBy ZXQgPSAocGlubmluZyAmJiBoYXNfcGlubmVkX2FyZWEoc2JpKSkgPwo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtRUFHQUlOIDogLUVOT1NQQzsKPj4+ICAgICAgICAg ICAgICAgICAgICAgICBmMmZzX2J1Z19vbihzYmksICFwaW5uaW5nKTsKPj4+ICAgICAgICAgICAg ICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7Cj4+PiAgICAgICAgICAgICAgIH0KPj4+IEBAIC0z MDAxLDEyICszMDA3LDYgQEAgc3RhdGljIGludCBnZXRfbmV3X3NlZ21lbnQoc3RydWN0IGYyZnNf c2JfaW5mbyAqc2JpLAo+Pj4gICAgICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7Cj4+PiAgICAg ICB9Cj4+Pgo+Pj4gLSAgICAgLyogbm8gZnJlZSBzZWN0aW9uIGluIGNvbnZlbnRpb25hbCBkZXZp Y2Ugb3IgY29udmVudGlvbmFsIHpvbmUgKi8KPj4+IC0gICAgIGlmIChuZXdfc2VjICYmIHBpbm5p bmcgJiYKPj4+IC0gICAgICAgICAgICAgZjJmc19pc19zZXF1ZW50aWFsX3pvbmVfYXJlYShzYmks IFNUQVJUX0JMT0NLKHNiaSwgc2Vnbm8pKSkgewo+Pj4gLSAgICAgICAgICAgICByZXQgPSAtRUFH QUlOOwo+Pj4gLSAgICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7Cj4+PiAtICAgICB9Cj4+PiAg ICAgICBfX3NldF9pbnVzZShzYmksIHNlZ25vKTsKPj4+ICAgICAgICpuZXdzZWcgPSBzZWdubzsK Pj4+ICAgb3V0X3VubG9jazoKPj4+IEBAIC0zNDcyLDggKzM0NzIsOSBAQCBpbnQgZjJmc19hbGxv Y2F0ZV9waW5uaW5nX3NlY3Rpb24oc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKQo+Pj4gICAgICAg ZXJyID0gZjJmc19hbGxvY2F0ZV9uZXdfc2VjdGlvbihzYmksIENVUlNFR19DT0xEX0RBVEFfUElO TkVELCBmYWxzZSk7Cj4+PiAgICAgICBmMmZzX3VubG9ja19vcChzYmksICZsYyk7Cj4+Pgo+Pj4g LSAgICAgaWYgKGYyZnNfc2JfaGFzX2Jsa3pvbmVkKHNiaSkgJiYgZXJyID09IC1FQUdBSU4gJiYg Z2NfcmVxdWlyZWQpIHsKPj4+IC0gICAgICAgICAgICAgZXJyID0gZjJmc19nY19yYW5nZShzYmks IDAsIHNiaS0+Zmlyc3Rfc2VxX3pvbmVfc2Vnbm8gLSAxLAo+Pj4gKyAgICAgaWYgKGhhc19waW5u ZWRfYXJlYShzYmkpICYmIGVyciA9PSAtRUFHQUlOICYmIGdjX3JlcXVpcmVkKSB7Cj4+PiArICAg ICAgICAgICAgIGVyciA9IGYyZnNfZ2NfcmFuZ2Uoc2JpLCAwLAo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2JpLT5waW5uZWRfYXJlYV9tYXhfc2Vjbm8gKiBTRUdTX1BFUl9TRUMo c2JpKSAtIDEsCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBaT05FRF9Q SU5fU0VDX1JFUVVJUkVEX0NPVU5ULCB0cnVlKTsKPj4+ICAgICAgICAgICAgICAgaWYgKGVycikK Pj4+ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwo+Pj4gZGlmZiAtLWdpdCBhL2Zz L2YyZnMvc2VnbWVudC5oIGIvZnMvZjJmcy9zZWdtZW50LmgKPj4+IGluZGV4IGRiMTA3OTE2OWEy My4uMWRkOGEyZmE5MjlkIDEwMDY0NAo+Pj4gLS0tIGEvZnMvZjJmcy9zZWdtZW50LmgKPj4+ICsr KyBiL2ZzL2YyZnMvc2VnbWVudC5oCj4+PiBAQCAtNDMsNiArNDMsNyBAQCBzdGF0aWMgaW5saW5l IHZvaWQgc2FuaXR5X2NoZWNrX3NlZ190eXBlKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwKPj4+ Cj4+PiAgICNkZWZpbmUgTUFJTl9TRUdTKHNiaSkgICAgICAoU01fSShzYmkpLT5tYWluX3NlZ21l bnRzKQo+Pj4gICAjZGVmaW5lIE1BSU5fU0VDUyhzYmkpICAgICAgKChzYmkpLT50b3RhbF9zZWN0 aW9ucykKPj4+ICsjZGVmaW5lIGhhc19waW5uZWRfYXJlYShzYmkpICgoc2JpKS0+cGlubmVkX2Fy ZWFfbWF4X3NlY25vIDwgTUFJTl9TRUNTKHNiaSkpCj4+Cj4+IExvb2tzIG1vcmUgbGlrZSBoYXNf dW5waW5uZWRfYXJlYShzYmkpLCBzaW5jZSB3ZSBhc3NpZ24gcGlubmVkX2FyZWFfbWF4X3NlY25v Cj4+IHcvIE1BSU5fU0VDUyhzYmkpIGJ5IGRlZmF1bHQsIGFuZCB3aWxsIGRlY3JlYXNlIGl0IG9u bHkgaWYgdGhlcmUgaXMgY29udiBzZWN0aW9ucwo+PiBvciB2YWxpZCByZXNpemFibGVfdGFpbF9z ZWNuby4KCkRhZWhvLAoKQW55IGNvbW1lbnRzIGFib3V0IHRoaXMgbWFjcm8gbmFtaW5nPwoKPj4K Pj4+Cj4+PiAgICNkZWZpbmUgVE9UQUxfU0VHUyhzYmkpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+PiAgICAgICAoU01fSShzYmkpID8gU01f SShzYmkpLT5zZWdtZW50X2NvdW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4+PiBkaWZmIC0tZ2l0IGEvZnMvZjJmcy9zdXBlci5jIGIvZnMvZjJmcy9zdXBlci5jCj4+PiBp bmRleCAzYmRiMGY4OTFjMzUuLmMxZTMxNTI4MmVjNiAxMDA2NDQKPj4+IC0tLSBhL2ZzL2YyZnMv c3VwZXIuYwo+Pj4gKysrIGIvZnMvZjJmcy9zdXBlci5jCj4+PiBAQCAtMjM1LDYgKzIzNSw3IEBA IGVudW0gewo+Pj4gICAgICAgT3B0X2pxZm10LAo+Pj4gICAgICAgT3B0X2NoZWNrcG9pbnQsCj4+ PiAgICAgICBPcHRfbG9va3VwX21vZGUsCj4+PiArICAgICBPcHRfcmVzaXphYmxlX3RhaWxfc2Vj bm8sCj4+PiAgICAgICBPcHRfZXJyLAo+Pj4gICB9Owo+Pj4KPj4+IEBAIC0zNjYsNiArMzY3LDcg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBmMmZzX3BhcmFtX3NwZWNz W10gPSB7Cj4+PiAgICAgICBmc3BhcmFtX2ZsYWcoImFnZV9leHRlbnRfY2FjaGUiLCBPcHRfYWdl X2V4dGVudF9jYWNoZSksCj4+PiAgICAgICBmc3BhcmFtX2VudW0oImVycm9ycyIsIE9wdF9lcnJv cnMsIGYyZnNfcGFyYW1fZXJyb3JzKSwKPj4+ICAgICAgIGZzcGFyYW1fZW51bSgibG9va3VwX21v ZGUiLCBPcHRfbG9va3VwX21vZGUsIGYyZnNfcGFyYW1fbG9va3VwX21vZGUpLAo+Pj4gKyAgICAg ZnNwYXJhbV91MzIoInJlc2l6YWJsZV90YWlsX3NlY25vIiwgT3B0X3Jlc2l6YWJsZV90YWlsX3Nl Y25vKSwKPj4+ICAgICAgIHt9Cj4+PiAgIH07Cj4+Pgo+Pj4gQEAgLTU1MSw2ICs1NTMsMTcgQEAg c3RhdGljIGlubGluZSB2b2lkIGFkanVzdF91bnVzYWJsZV9jYXBfcGVyYyhzdHJ1Y3QgZjJmc19z Yl9pbmZvICpzYmkpCj4+PiAgICAgICAgICAgICAgICAgICAgICAgRjJGU19PUFRJT04oc2JpKS51 bnVzYWJsZV9jYXBfcGVyYyk7Cj4+PiAgIH0KPj4+Cj4+PiArc3RhdGljIGlubGluZSB2b2lkIGFk anVzdF9waW5uZWRfYXJlYV9ib3VuZGFyeShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpCj4+PiAr ewo+Pj4gKyAgICAgc2JpLT5waW5uZWRfYXJlYV9tYXhfc2Vjbm8gPSBNQUlOX1NFQ1Moc2JpKTsK Pj4+ICsgICAgIGlmIChmMmZzX3NiX2hhc19ibGt6b25lZChzYmkpICYmIHNiaS0+Zmlyc3Rfc2Vx X3pvbmVfc2Vnbm8gIT0gTlVMTF9TRUdOTykKPj4+ICsgICAgICAgICAgICAgc2JpLT5waW5uZWRf YXJlYV9tYXhfc2Vjbm8gPSBtaW4oc2JpLT5waW5uZWRfYXJlYV9tYXhfc2Vjbm8sCj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfU0VDX0ZST01fU0VHKHNiaSwgc2JpLT5maXJz dF9zZXFfem9uZV9zZWdubykpOwo+Pj4gKyAgICAgaWYgKEYyRlNfT1BUSU9OKHNiaSkucmVzaXph YmxlX3RhaWxfc2Vjbm8pCj4+PiArICAgICAgICAgICAgIHNiaS0+cGlubmVkX2FyZWFfbWF4X3Nl Y25vID0gbWluKHNiaS0+cGlubmVkX2FyZWFfbWF4X3NlY25vLAo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTUFJTl9TRUNTKHNiaSkgLSBGMkZTX09QVElPTihzYmkpLnJlc2l6YWJs ZV90YWlsX3NlY25vKTsKPj4+ICt9Cj4+PiArCj4+PiAgIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2 b2lkICpmb28pCj4+PiAgIHsKPj4+ICAgICAgIHN0cnVjdCBmMmZzX2lub2RlX2luZm8gKmZpID0g KHN0cnVjdCBmMmZzX2lub2RlX2luZm8gKikgZm9vOwo+Pj4gQEAgLTEyMzUsNiArMTI0OCw5IEBA IHN0YXRpYyBpbnQgZjJmc19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVj dCBmc19wYXJhbWV0ZXIgKnBhcmFtKQo+Pj4gICAgICAgICAgICAgICBGMkZTX0NUWF9JTkZPKGN0 eCkubG9va3VwX21vZGUgPSByZXN1bHQudWludF8zMjsKPj4+ICAgICAgICAgICAgICAgY3R4LT5z cGVjX21hc2sgfD0gRjJGU19TUEVDX2xvb2t1cF9tb2RlOwo+Pj4gICAgICAgICAgICAgICBicmVh azsKPj4+ICsgICAgIGNhc2UgT3B0X3Jlc2l6YWJsZV90YWlsX3NlY25vOgo+Pj4gKyAgICAgICAg ICAgICBGMkZTX0NUWF9JTkZPKGN0eCkucmVzaXphYmxlX3RhaWxfc2Vjbm8gPSByZXN1bHQudWlu dF8zMjsKPj4+ICsgICAgICAgICAgICAgYnJlYWs7Cj4+PiAgICAgICB9Cj4+PiAgICAgICByZXR1 cm4gMDsKPj4+ICAgfQo+Pj4gQEAgLTE3NzEsNiArMTc4NywxMiBAQCBzdGF0aWMgdm9pZCBmMmZz X2FwcGx5X29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnNiKQo+Pj4KPj4+ICAgc3RhdGljIGludCBmMmZzX3Nhbml0eV9jaGVja19vcHRpb25zKHN0cnVj dCBmMmZzX3NiX2luZm8gKnNiaSwgYm9vbCByZW1vdW50KQo+Pj4gICB7Cj4+PiArICAgICBpZiAo cmVtb3VudCAmJgo+Pj4gKyAgICAgICAgIEYyRlNfT1BUSU9OKHNiaSkucmVzaXphYmxlX3RhaWxf c2Vjbm8gPj0gTUFJTl9TRUNTKHNiaSkpIHsKPj4+ICsgICAgICAgICAgICAgZjJmc19lcnIoc2Jp LCAiT3B0aW9uIHJlc2l6YWJsZV90YWlsX3NlY25vIGlzIGxhcmdlciB0aGFuIG9yIGVxdWFsIHRv IHRvdGFsIHNlY3Rpb25zICgldSA+PSAldSkiLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRjJGU19PUFRJT04oc2JpKS5yZXNpemFibGVfdGFpbF9zZWNubywgTUFJTl9TRUNTKHNi aSkpOwo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+ICsgICAgIH0KPj4+ICAg ICAgIGlmIChmMmZzX3NiX2hhc19kZXZpY2VfYWxpYXMoc2JpKSAmJgo+Pj4gICAgICAgICAgICF0 ZXN0X29wdChzYmksIFJFQURfRVhURU5UX0NBQ0hFKSkgewo+Pj4gICAgICAgICAgICAgICBmMmZz X2VycihzYmksICJkZXZpY2UgYWxpYXNpbmcgcmVxdWlyZXMgZXh0ZW50IGNhY2hlIik7Cj4+PiBA QCAtMjU0NCw2ICsyNTY2LDEwIEBAIHN0YXRpYyBpbnQgZjJmc19zaG93X29wdGlvbnMoc3RydWN0 IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpCj4+PiAgICAgICBlbHNlIGlmIChG MkZTX09QVElPTihzYmkpLmxvb2t1cF9tb2RlID09IExPT0tVUF9BVVRPKQo+Pj4gICAgICAgICAg ICAgICBzZXFfc2hvd19vcHRpb24oc2VxLCAibG9va3VwX21vZGUiLCAiYXV0byIpOwo+Pj4KPj4+ ICsgICAgIGlmIChGMkZTX09QVElPTihzYmkpLnJlc2l6YWJsZV90YWlsX3NlY25vKQo+Pj4gKyAg ICAgICAgICAgICBzZXFfcHJpbnRmKHNlcSwgIixyZXNpemFibGVfdGFpbF9zZWNubz0ldSIsCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGMkZTX09QVElPTihzYmkpLnJlc2l6YWJs ZV90YWlsX3NlY25vKTsKPj4+ICsKPj4+ICAgICAgIHJldHVybiAwOwo+Pj4gICB9Cj4+Pgo+Pj4g QEAgLTI1ODYsNiArMjYxMiw3IEBAIHN0YXRpYyB2b2lkIGRlZmF1bHRfb3B0aW9ucyhzdHJ1Y3Qg ZjJmc19zYl9pbmZvICpzYmksIGJvb2wgcmVtb3VudCkKPj4+ICAgICAgIEYyRlNfT1BUSU9OKHNi aSkuYmdnY19tb2RlID0gQkdHQ19NT0RFX09OOwo+Pj4gICAgICAgRjJGU19PUFRJT04oc2JpKS5t ZW1vcnlfbW9kZSA9IE1FTU9SWV9NT0RFX05PUk1BTDsKPj4+ICAgICAgIEYyRlNfT1BUSU9OKHNi aSkuZXJyb3JzID0gTU9VTlRfRVJST1JTX0NPTlRJTlVFOwo+Pj4gKyAgICAgRjJGU19PUFRJT04o c2JpKS5yZXNpemFibGVfdGFpbF9zZWNubyA9IDA7Cj4+Pgo+Pj4gICAgICAgc2V0X29wdChzYmks IElOTElORV9YQVRUUik7Cj4+PiAgICAgICBzZXRfb3B0KHNiaSwgSU5MSU5FX0RBVEEpOwo+Pj4g QEAgLTMwNDUsNiArMzA3Miw3IEBAIHN0YXRpYyBpbnQgX19mMmZzX3JlbW91bnQoc3RydWN0IGZz X2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQo+Pj4gICAgICAgc2ItPnNfZmxh Z3MgPSAoc2ItPnNfZmxhZ3MgJiB+U0JfUE9TSVhBQ0wpIHwKPj4+ICAgICAgICAgICAgICAgKHRl c3Rfb3B0KHNiaSwgUE9TSVhfQUNMKSA/IFNCX1BPU0lYQUNMIDogMCk7Cj4+Pgo+Pj4gKyAgICAg YWRqdXN0X3Bpbm5lZF9hcmVhX2JvdW5kYXJ5KHNiaSk7Cj4+PiAgICAgICBsaW1pdF9yZXNlcnZl X3Jvb3Qoc2JpKTsKPj4+ICAgICAgIGZjLT5zYl9mbGFncyA9IChmbGFncyAmIH5TQl9MQVpZVElN RSkgfCAoc2ItPnNfZmxhZ3MgJiBTQl9MQVpZVElNRSk7Cj4+Pgo+Pj4gQEAgLTUyODcsNiArNTMx NSwxNCBAQCBzdGF0aWMgaW50IGYyZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNi LCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCj4+PiAgICAgICAvKiBnZXQgc2Vnbm8gb2YgZmlyc3Qg em9uZWQgYmxvY2sgZGV2aWNlICovCj4+PiAgICAgICBzYmktPmZpcnN0X3NlcV96b25lX3NlZ25v ID0gZ2V0X2ZpcnN0X3NlcV96b25lX3NlZ25vKHNiaSk7Cj4+Pgo+Pj4gKyAgICAgaWYgKEYyRlNf T1BUSU9OKHNiaSkucmVzaXphYmxlX3RhaWxfc2Vjbm8gPj0gTUFJTl9TRUNTKHNiaSkpIHsKPj4+ ICsgICAgICAgICAgICAgZjJmc19lcnIoc2JpLCAiT3B0aW9uIHJlc2l6YWJsZV90YWlsX3NlY25v IGlzIGxhcmdlciB0aGFuIG9yIGVxdWFsIHRvIHRvdGFsIHNlY3Rpb25zICgldSA+PSAldSkiLAo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjJGU19PUFRJT04oc2JpKS5yZXNpemFi bGVfdGFpbF9zZWNubywgTUFJTl9TRUNTKHNiaSkpOwo+Pj4gKyAgICAgICAgICAgICBlcnIgPSAt RUlOVkFMOwo+Pj4gKyAgICAgICAgICAgICBnb3RvIGZyZWVfbm07Cj4+PiArICAgICB9Cj4+Cj4+ IEhvdyBhYm91dCBtZXJnaW5nIHRoaXMgY2hlY2sgaW50byB0aGUgb25lIGluIGYyZnNfc2FuaXR5 X2NoZWNrX29wdGlvbnMoKT8KPiAKPiBUaGUgcmVhc29uIGl0IHdhcyBrZXB0IHNlcGFyYXRlIGlz IHRoYXQgZHVyaW5nIHRoZSBpbml0aWFsIG1vdW50LAo+IGYyZnNfc2FuaXR5X2NoZWNrX29wdGlv bnMoc2JpLCBmYWxzZSkgaXMgY2FsbGVkIGJlZm9yZSBpbml0X3NiX2luZm8oc2JpKS4KPiBBdCB0 aGF0IHBvaW50LCBzYmktPnRvdGFsX3NlY3Rpb25zIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5 ZXQsIHNvCj4gTUFJTl9TRUNTKHNiaSkgaXMgc3RpbGwgMC4KCkFoLCBJIHNlZSwgdGhhbmtzIGZv ciB0aGUgZXhwbGFuYXRpb24uCgo+IAo+IElmIHdlIHNpbXBseSBjaGVjayBgRjJGU19PUFRJT04o c2JpKS5yZXNpemFibGVfdGFpbF9zZWNubyA+PSBNQUlOX1NFQ1Moc2JpKWAKPiBpbiBmMmZzX3Nh bml0eV9jaGVja19vcHRpb25zKCksIGl0IGV2YWx1YXRlcyBhZ2FpbnN0IDAgYW5kIGNhdXNlcyB0 aGUgaW5pdGlhbAo+IG1vdW50IHRvIHVuY29uZGl0aW9uYWxseSBmYWlsIHdoZW5ldmVyIHJlc2l6 YWJsZV90YWlsX3NlY25vIGlzIHNwZWNpZmllZC4KPiAKPiBUaGlzIGlzIHNpbWlsYXIgdG8gaG93 IGBtYXhfb3Blbl96b25lc2AgaXMgY2hlY2tlZCBvbmx5IG9uIHJlbW91bnQgaW4KPiBmMmZzX3Nh bml0eV9jaGVja19vcHRpb25zKCkgYW5kIGNoZWNrZWQgc2VwYXJhdGVseSBkdXJpbmcgdGhlIGlu aXRpYWwgbW91bnQuCj4gCj4gSG93ZXZlciwgaWYgeW91J2QgcHJlZmVyIHRvIG1lcmdlIHRoZW0g aW50byBmMmZzX3Nhbml0eV9jaGVja19vcHRpb25zKCksIHdlCj4gY2FuIHVzZSBsZTMyX3RvX2Nw dShzYmktPnJhd19zdXBlci0+c2VjdGlvbl9jb3VudCksCj4gc2luY2Ugc2JpLT5yYXdfc3VwZXIg aXMgYWxyZWFkeSBsb2FkZWQgaW4gbWVtb3J5IGJ5IHRoZW4uCgpJIHRoaW5rIGxhdHRlciBvbmUg aXMgYmV0dGVyLCBtb3JlIGNsZWFuIGFuZCBiZXR0ZXIgdG8gbWFpbnRhaW4sIHBsZWFzZSBtZXJn ZQppbnRvIGYyZnNfc2FuaXR5X2NoZWNrX29wdGlvbnMoKS4KClRoYW5rcywKCj4gCj4gV2hpY2gg b25lIGRvIHlvdSBwcmVmZXI/Cj4gCj4gVGhhbmtzLAo+IAo+Pgo+PiBUaGFua3MsCj4+Cj4+PiAr ICAgICBhZGp1c3RfcGlubmVkX2FyZWFfYm91bmRhcnkoc2JpKTsKPj4+ICsKPj4+ICAgICAgIHNi aS0+cmVzZXJ2ZWRfcGluX3NlY3Rpb24gPSBmMmZzX3NiX2hhc19ibGt6b25lZChzYmkpID8KPj4+ ICAgICAgICAgICAgICAgICAgICAgICBaT05FRF9QSU5fU0VDX1JFUVVJUkVEX0NPVU5UIDoKPj4+ ICAgICAgICAgICAgICAgICAgICAgICBHRVRfU0VDX0ZST01fU0VHKHNiaSwgb3ZlcnByb3Zpc2lv bl9zZWdtZW50cyhzYmkpKTsKPj4+IGRpZmYgLS1naXQgYS9mcy9mMmZzL3N5c2ZzLmMgYi9mcy9m MmZzL3N5c2ZzLmMKPj4+IGluZGV4IDMyMDFlMjE4NWZlYS4uODExZTM1MGExNDMwIDEwMDY0NAo+ Pj4gLS0tIGEvZnMvZjJmcy9zeXNmcy5jCj4+PiArKysgYi9mcy9mMmZzL3N5c2ZzLmMKPj4+IEBA IC0xMzEzLDYgKzEzMTMsNyBAQCBGMkZTX1NCSV9HRU5FUkFMX1JXX0FUVFIoYmxrem9uZV9hbGxv Y19wb2xpY3kpOwo+Pj4gICAjZW5kaWYKPj4+ICAgRjJGU19TQklfR0VORVJBTF9SV19BVFRSKGNh cnZlX291dCk7Cj4+PiAgIEYyRlNfU0JJX0dFTkVSQUxfUldfQVRUUihyZXNlcnZlZF9waW5fc2Vj dGlvbik7Cj4+PiArRjJGU19TQklfR0VORVJBTF9ST19BVFRSKHBpbm5lZF9hcmVhX21heF9zZWNu byk7Cj4+PiAgIEYyRlNfU0JJX0dFTkVSQUxfUldfQVRUUihiZ2djX2lvX2F3YXJlKTsKPj4+ICAg RjJGU19TQklfR0VORVJBTF9SV19BVFRSKG1heF9sb2NrX2VsYXBzZWRfdGltZSk7Cj4+PiAgIEYy RlNfU0JJX0dFTkVSQUxfUldfQVRUUihsb2NrX2R1cmF0aW9uX3ByaW9yaXR5KTsKPj4+IEBAIC0x NTI1LDYgKzE1MjYsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZjJmc19hdHRyc1tdID0g ewo+Pj4gICAgICAgQVRUUl9MSVNUKG1heF9yZWFkX2V4dGVudF9jb3VudCksCj4+PiAgICAgICBB VFRSX0xJU1QoY2FydmVfb3V0KSwKPj4+ICAgICAgIEFUVFJfTElTVChyZXNlcnZlZF9waW5fc2Vj dGlvbiksCj4+PiArICAgICBBVFRSX0xJU1QocGlubmVkX2FyZWFfbWF4X3NlY25vKSwKPj4+ICAg ICAgIEFUVFJfTElTVChhbGxvY2F0ZV9zZWN0aW9uX2hpbnQpLAo+Pj4gICAgICAgQVRUUl9MSVNU KGFsbG9jYXRlX3NlY3Rpb25fcG9saWN5KSwKPj4+ICAgICAgIEFUVFJfTElTVChtYXhfbG9ja19l bGFwc2VkX3RpbWUpLAo+PgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpMaW51eC1mMmZzLWRldmVsIG1haWxpbmcgbGlzdApMaW51eC1mMmZzLWRldmVs QGxpc3RzLnNvdXJjZWZvcmdlLm5ldApodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0 cy9saXN0aW5mby9saW51eC1mMmZzLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0BC033FFD for ; Wed, 26 Aug 2026 02:03:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787709792; cv=none; b=QH9ZjG/d+6b/u9r/o/hqS6D5zvtJsiQLsdeyonuIcHuPYL2JPHjoJUYsUEHq1W3E2/aSM7H46DK9ANWG43FVx2KtVpijuQQ+FYGAhbEhasgoI03ObYyfCbuxhBbvtT7fvmSnXDXng2xKTOOdD2ZdayvIFZ1PAuYksXN81KtT3vA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787709792; c=relaxed/simple; bh=Kn80mhmX9qF5qyDN/Ul2nTSvNpMMptm8ZrtUvEqvzJA=; h=Message-ID:Date:MIME-Version:Cc:Subject:To:References:From: In-Reply-To:Content-Type; b=JGWKwq1sLOANWv3jvgcbJpYwPcNiMSknkx3eXQfSM8G1pkSREs9TpEoq+9/RIZdCGOEOVPE54Yy49ZR+MBGAeR3mH5yI1Db4zxcIGk5zpA5TlceX4rIOiKy+9woczCD+bwtpjKeKHCaWtH2B1qg7UaI4iwhmJJNNqrrNanqlJAg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dRGOmqFV; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dRGOmqFV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DA0261F000E9; Wed, 26 Aug 2026 02:03:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1787709790; bh=tBzUdJeSdTzGaRI5If1BMgwks/AwJh7GQ1o3WyB/F7k=; h=Date:Cc:Subject:To:References:From:In-Reply-To; b=dRGOmqFV/IspwmnGZ+mvilwH5kwyM9+XzOMHEv7wbIfveOCCXU1TYKKM/8mIdWqh0 R51YREqFQ79gNeVej1ecyFCg1Ilhw6bL19kr4owc8FzU2MnPLi1+YBQ0PUrQZ3iLCa T8YBUZWShlF83CmGXMFcO+X71V+rZ9h2OE+VN4FIT39D/CdxNM7idoHUVBshJMxiMR 1Fw/9MstmH9OVK8mj+7R3p/iDXnykNdvSR7wYsPsZ1vX4itDb0yT9Zq5YuVrVIDr9/ EoGSphFkzcdpLt1xE0ci+Xirpb3vQp1gScaE/ZO/luM3DEV7Ikny23StOvRHm+qith FioCs+qN5a6dw== Message-ID: <7b1ca156-316d-428c-9a8b-4fe55eb9cbfd@kernel.org> Date: Wed, 26 Aug 2026 10:03:08 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Cc: chao@kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, kernel-team@android.com, Daeho Jeong Subject: Re: [f2fs-dev] [PATCH] f2fs: support resizable tail section and unify pinned allocation To: Daeho Jeong References: <20260824191404.2558269-1-daeho43@gmail.com> <093eae1e-f533-404c-b8da-f5025d4e3db2@kernel.org> Content-Language: en-US From: Chao Yu In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 8/26/26 00:14, Daeho Jeong wrote: > On Mon, Aug 24, 2026 at 8:16 PM Chao Yu wrote: >> >> On 8/25/26 03:14, Daeho Jeong wrote: >>> From: Daeho Jeong >>> >>> Currently, zoned block devices restrict pinned file allocations to >>> conventional zones at the beginning of the storage (before >>> first_seq_zone_segno), triggering range GC when conventional space is >>> exhausted. >>> >>> On regular block devices, when preparing for future online filesystem >>> resizing (e.g. partition shrinking), pinned files must not be allocated >>> in the tail area that will be truncated, as pinned files cannot be >>> relocated by GC. Specifying the resizable tail area size (in sections) >>> allows uniform mount configuration across devices of different storage >>> capacities. >>> >>> To support this, introduce a unified `pinned_area_max_secno` boundary >>> abstraction in `f2fs_sb_info`: >>> 1. Add `-o resizable_tail_secno=%u` mount option to specify the number >>> of sections at the tail of the filesystem reserved for resizing. >>> 2. In `f2fs_fill_super()`, initialize `sbi->pinned_area_max_secno` as: >>> min(MAIN_SECS(sbi) - resizable_tail_sec, zoned_max_sec). >>> 3. In `get_new_segment()`, restrict segment allocation for pinned files >>> (`pinning == true`) to `0 .. sbi->pinned_area_max_secno - 1`. If no >>> free section is available in the pinned area, return -EAGAIN. >>> 4. In `f2fs_allocate_pinning_section()`, unify the range GC trigger to >>> run `f2fs_gc_range()` up to `sbi->pinned_area_max_secno` whenever >>> `sbi->pinned_area_max_secno < MAIN_SECS(sbi)` and allocation >>> returns -EAGAIN. >>> 5. Expose `/sys/fs/f2fs//pinned_area_max_secno` as a read-only >>> sysfs node. >>> >>> Signed-off-by: Daeho Jeong >>> Signed-off-by: Sunmin Jeong >>> --- >>> Documentation/ABI/testing/sysfs-fs-f2fs | 7 +++++ >>> Documentation/filesystems/f2fs.rst | 8 +++++- >>> fs/f2fs/f2fs.h | 2 ++ >>> fs/f2fs/segment.c | 33 ++++++++++++----------- >>> fs/f2fs/segment.h | 1 + >>> fs/f2fs/super.c | 36 +++++++++++++++++++++++++ >>> fs/f2fs/sysfs.c | 2 ++ >>> 7 files changed, 72 insertions(+), 17 deletions(-) >>> >>> diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs >>> index 85194e4c7f01..0cebc89799dd 100644 >>> --- a/Documentation/ABI/testing/sysfs-fs-f2fs >>> +++ b/Documentation/ABI/testing/sysfs-fs-f2fs >>> @@ -1013,3 +1013,10 @@ Description: Every time a write operation completes f2fs_write_end_io() is >>> the maximum size of a write bio that is completed in atomic >>> (atc) context. The default value for this attribute is UINT_MAX >>> which means that this functionality is disabled by default. >>> + >>> +What: /sys/fs/f2fs//pinned_area_max_secno >>> +Date: August 2026 >>> +Contact: "Daeho Jeong" >>> +Description: This is a read-only entry to show the upper bound section number >>> + for pinned files. Pinned files will only be allocated within >>> + sections 0 to pinned_area_max_secno - 1. >>> diff --git a/Documentation/filesystems/f2fs.rst b/Documentation/filesystems/f2fs.rst >>> index 1a5fd4afe609..a3c3b6948734 100644 >>> --- a/Documentation/filesystems/f2fs.rst >>> +++ b/Documentation/filesystems/f2fs.rst >>> @@ -417,7 +417,13 @@ lookup_mode=%s Control the directory lookup behavior for casefolded >>> auto F2FS determines the mode based on the >>> on-disk `SB_ENC_NO_COMPAT_FALLBACK_FL` >>> flag. >>> - ================== ======================================== >>> +resizable_tail_secno=%u Control the number of sections at the tail of the >>> + filesystem reserved for online resizing. Pinned files >>> + will only be allocated within sections 0 to >>> + (MAIN_SECS - resizable_tail_secno) - 1. If set to 0 >>> + (default), there is no tail restriction unless running >>> + on a zoned block device where conventional zones are >>> + used. >>> ======================== ============================================================ >>> >>> Debugfs Entries >>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h >>> index b0a9c14de595..16720f1f0a9c 100644 >>> --- a/fs/f2fs/f2fs.h >>> +++ b/fs/f2fs/f2fs.h >>> @@ -255,6 +255,7 @@ struct f2fs_mount_info { >>> block_t unusable_cap; /* Amount of space allowed to be >>> * unusable when disabling checkpoint >>> */ >>> + unsigned int resizable_tail_secno; /* number of resizable tail sections */ >>> >>> /* For compression */ >>> unsigned char compress_algorithm; /* algorithm type */ >>> @@ -2005,6 +2006,7 @@ struct f2fs_sb_info { >>> spinlock_t dev_lock; /* protect dirty_device */ >>> bool aligned_blksize; /* all devices has the same logical blksize */ >>> unsigned int first_seq_zone_segno; /* first segno in sequential zone */ >>> + unsigned int pinned_area_max_secno; /* upper bound section for pinned files */ >>> unsigned int bggc_io_aware; /* For adjust the BG_GC priority when pending IO */ >>> unsigned int allocate_section_hint; /* the boundary position between devices */ >>> unsigned int allocate_section_policy; /* determine the section writing priority */ >>> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c >>> index 56decf9c691c..ed6f2947210b 100644 >>> --- a/fs/f2fs/segment.c >>> +++ b/fs/f2fs/segment.c >>> @@ -2877,6 +2877,7 @@ static int get_new_segment(struct f2fs_sb_info *sbi, >>> unsigned int old_zoneno = GET_ZONE_FROM_SEG(sbi, *newseg); >>> unsigned int alloc_policy = sbi->allocate_section_policy; >>> unsigned int alloc_hint = sbi->allocate_section_hint; >>> + unsigned int max_secno = MAIN_SECS(sbi); >>> bool init = true; >>> bool looped = false; >>> int i, devi; >>> @@ -2908,7 +2909,7 @@ static int get_new_segment(struct f2fs_sb_info *sbi, >>> */ >>> if (f2fs_sb_has_blkzoned(sbi)) { >>> /* Prioritize writing to conventional zones */ >>> - if (sbi->blkzone_alloc_policy == BLKZONE_ALLOC_PRIOR_CONV || pinning) >>> + if (sbi->blkzone_alloc_policy == BLKZONE_ALLOC_PRIOR_CONV) >>> segno = 0; >>> else >>> segno = max(sbi->first_seq_zone_segno, *newseg); >>> @@ -2924,19 +2925,24 @@ static int get_new_segment(struct f2fs_sb_info *sbi, >>> alloc_hint > MAIN_SECS(sbi)) >>> alloc_hint = MAIN_SECS(sbi); >>> >>> - if (alloc_policy == ALLOCATE_FORWARD_FROM_HINT && >>> - hint < alloc_hint) >>> + if (pinning) { >>> + max_secno = sbi->pinned_area_max_secno; >>> + hint = 0; >>> + } else if (alloc_policy == ALLOCATE_FORWARD_FROM_HINT && >>> + hint < alloc_hint) { >>> hint = alloc_hint; >>> - else if (alloc_policy == ALLOCATE_FORWARD_WITHIN_HINT && >>> - hint >= alloc_hint) >>> + } else if (alloc_policy == ALLOCATE_FORWARD_WITHIN_HINT && >>> + hint >= alloc_hint) { >>> hint = 0; >>> + } >>> >>> find_other_zone: >>> - secno = find_next_zero_bit(free_i->free_secmap, MAIN_SECS(sbi), hint); >>> + secno = find_next_zero_bit(free_i->free_secmap, max_secno, hint); >>> >>> - if (secno >= MAIN_SECS(sbi)) { >>> + if (secno >= max_secno) { >>> if (looped) { >>> - ret = -ENOSPC; >>> + ret = (pinning && has_pinned_area(sbi)) ? >>> + -EAGAIN : -ENOSPC; >>> f2fs_bug_on(sbi, !pinning); >>> goto out_unlock; >>> } >>> @@ -3001,12 +3007,6 @@ static int get_new_segment(struct f2fs_sb_info *sbi, >>> goto out_unlock; >>> } >>> >>> - /* no free section in conventional device or conventional zone */ >>> - if (new_sec && pinning && >>> - f2fs_is_sequential_zone_area(sbi, START_BLOCK(sbi, segno))) { >>> - ret = -EAGAIN; >>> - goto out_unlock; >>> - } >>> __set_inuse(sbi, segno); >>> *newseg = segno; >>> out_unlock: >>> @@ -3472,8 +3472,9 @@ int f2fs_allocate_pinning_section(struct f2fs_sb_info *sbi) >>> err = f2fs_allocate_new_section(sbi, CURSEG_COLD_DATA_PINNED, false); >>> f2fs_unlock_op(sbi, &lc); >>> >>> - if (f2fs_sb_has_blkzoned(sbi) && err == -EAGAIN && gc_required) { >>> - err = f2fs_gc_range(sbi, 0, sbi->first_seq_zone_segno - 1, >>> + if (has_pinned_area(sbi) && err == -EAGAIN && gc_required) { >>> + err = f2fs_gc_range(sbi, 0, >>> + sbi->pinned_area_max_secno * SEGS_PER_SEC(sbi) - 1, >>> true, ZONED_PIN_SEC_REQUIRED_COUNT, true); >>> if (err) >>> return err; >>> diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h >>> index db1079169a23..1dd8a2fa929d 100644 >>> --- a/fs/f2fs/segment.h >>> +++ b/fs/f2fs/segment.h >>> @@ -43,6 +43,7 @@ static inline void sanity_check_seg_type(struct f2fs_sb_info *sbi, >>> >>> #define MAIN_SEGS(sbi) (SM_I(sbi)->main_segments) >>> #define MAIN_SECS(sbi) ((sbi)->total_sections) >>> +#define has_pinned_area(sbi) ((sbi)->pinned_area_max_secno < MAIN_SECS(sbi)) >> >> Looks more like has_unpinned_area(sbi), since we assign pinned_area_max_secno >> w/ MAIN_SECS(sbi) by default, and will decrease it only if there is conv sections >> or valid resizable_tail_secno. Daeho, Any comments about this macro naming? >> >>> >>> #define TOTAL_SEGS(sbi) \ >>> (SM_I(sbi) ? SM_I(sbi)->segment_count : \ >>> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c >>> index 3bdb0f891c35..c1e315282ec6 100644 >>> --- a/fs/f2fs/super.c >>> +++ b/fs/f2fs/super.c >>> @@ -235,6 +235,7 @@ enum { >>> Opt_jqfmt, >>> Opt_checkpoint, >>> Opt_lookup_mode, >>> + Opt_resizable_tail_secno, >>> Opt_err, >>> }; >>> >>> @@ -366,6 +367,7 @@ static const struct fs_parameter_spec f2fs_param_specs[] = { >>> fsparam_flag("age_extent_cache", Opt_age_extent_cache), >>> fsparam_enum("errors", Opt_errors, f2fs_param_errors), >>> fsparam_enum("lookup_mode", Opt_lookup_mode, f2fs_param_lookup_mode), >>> + fsparam_u32("resizable_tail_secno", Opt_resizable_tail_secno), >>> {} >>> }; >>> >>> @@ -551,6 +553,17 @@ static inline void adjust_unusable_cap_perc(struct f2fs_sb_info *sbi) >>> F2FS_OPTION(sbi).unusable_cap_perc); >>> } >>> >>> +static inline void adjust_pinned_area_boundary(struct f2fs_sb_info *sbi) >>> +{ >>> + sbi->pinned_area_max_secno = MAIN_SECS(sbi); >>> + if (f2fs_sb_has_blkzoned(sbi) && sbi->first_seq_zone_segno != NULL_SEGNO) >>> + sbi->pinned_area_max_secno = min(sbi->pinned_area_max_secno, >>> + GET_SEC_FROM_SEG(sbi, sbi->first_seq_zone_segno)); >>> + if (F2FS_OPTION(sbi).resizable_tail_secno) >>> + sbi->pinned_area_max_secno = min(sbi->pinned_area_max_secno, >>> + MAIN_SECS(sbi) - F2FS_OPTION(sbi).resizable_tail_secno); >>> +} >>> + >>> static void init_once(void *foo) >>> { >>> struct f2fs_inode_info *fi = (struct f2fs_inode_info *) foo; >>> @@ -1235,6 +1248,9 @@ static int f2fs_parse_param(struct fs_context *fc, struct fs_parameter *param) >>> F2FS_CTX_INFO(ctx).lookup_mode = result.uint_32; >>> ctx->spec_mask |= F2FS_SPEC_lookup_mode; >>> break; >>> + case Opt_resizable_tail_secno: >>> + F2FS_CTX_INFO(ctx).resizable_tail_secno = result.uint_32; >>> + break; >>> } >>> return 0; >>> } >>> @@ -1771,6 +1787,12 @@ static void f2fs_apply_options(struct fs_context *fc, struct super_block *sb) >>> >>> static int f2fs_sanity_check_options(struct f2fs_sb_info *sbi, bool remount) >>> { >>> + if (remount && >>> + F2FS_OPTION(sbi).resizable_tail_secno >= MAIN_SECS(sbi)) { >>> + f2fs_err(sbi, "Option resizable_tail_secno is larger than or equal to total sections (%u >= %u)", >>> + F2FS_OPTION(sbi).resizable_tail_secno, MAIN_SECS(sbi)); >>> + return -EINVAL; >>> + } >>> if (f2fs_sb_has_device_alias(sbi) && >>> !test_opt(sbi, READ_EXTENT_CACHE)) { >>> f2fs_err(sbi, "device aliasing requires extent cache"); >>> @@ -2544,6 +2566,10 @@ static int f2fs_show_options(struct seq_file *seq, struct dentry *root) >>> else if (F2FS_OPTION(sbi).lookup_mode == LOOKUP_AUTO) >>> seq_show_option(seq, "lookup_mode", "auto"); >>> >>> + if (F2FS_OPTION(sbi).resizable_tail_secno) >>> + seq_printf(seq, ",resizable_tail_secno=%u", >>> + F2FS_OPTION(sbi).resizable_tail_secno); >>> + >>> return 0; >>> } >>> >>> @@ -2586,6 +2612,7 @@ static void default_options(struct f2fs_sb_info *sbi, bool remount) >>> F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_ON; >>> F2FS_OPTION(sbi).memory_mode = MEMORY_MODE_NORMAL; >>> F2FS_OPTION(sbi).errors = MOUNT_ERRORS_CONTINUE; >>> + F2FS_OPTION(sbi).resizable_tail_secno = 0; >>> >>> set_opt(sbi, INLINE_XATTR); >>> set_opt(sbi, INLINE_DATA); >>> @@ -3045,6 +3072,7 @@ static int __f2fs_remount(struct fs_context *fc, struct super_block *sb) >>> sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | >>> (test_opt(sbi, POSIX_ACL) ? SB_POSIXACL : 0); >>> >>> + adjust_pinned_area_boundary(sbi); >>> limit_reserve_root(sbi); >>> fc->sb_flags = (flags & ~SB_LAZYTIME) | (sb->s_flags & SB_LAZYTIME); >>> >>> @@ -5287,6 +5315,14 @@ static int f2fs_fill_super(struct super_block *sb, struct fs_context *fc) >>> /* get segno of first zoned block device */ >>> sbi->first_seq_zone_segno = get_first_seq_zone_segno(sbi); >>> >>> + if (F2FS_OPTION(sbi).resizable_tail_secno >= MAIN_SECS(sbi)) { >>> + f2fs_err(sbi, "Option resizable_tail_secno is larger than or equal to total sections (%u >= %u)", >>> + F2FS_OPTION(sbi).resizable_tail_secno, MAIN_SECS(sbi)); >>> + err = -EINVAL; >>> + goto free_nm; >>> + } >> >> How about merging this check into the one in f2fs_sanity_check_options()? > > The reason it was kept separate is that during the initial mount, > f2fs_sanity_check_options(sbi, false) is called before init_sb_info(sbi). > At that point, sbi->total_sections has not been initialized yet, so > MAIN_SECS(sbi) is still 0. Ah, I see, thanks for the explanation. > > If we simply check `F2FS_OPTION(sbi).resizable_tail_secno >= MAIN_SECS(sbi)` > in f2fs_sanity_check_options(), it evaluates against 0 and causes the initial > mount to unconditionally fail whenever resizable_tail_secno is specified. > > This is similar to how `max_open_zones` is checked only on remount in > f2fs_sanity_check_options() and checked separately during the initial mount. > > However, if you'd prefer to merge them into f2fs_sanity_check_options(), we > can use le32_to_cpu(sbi->raw_super->section_count), > since sbi->raw_super is already loaded in memory by then. I think latter one is better, more clean and better to maintain, please merge into f2fs_sanity_check_options(). Thanks, > > Which one do you prefer? > > Thanks, > >> >> Thanks, >> >>> + adjust_pinned_area_boundary(sbi); >>> + >>> sbi->reserved_pin_section = f2fs_sb_has_blkzoned(sbi) ? >>> ZONED_PIN_SEC_REQUIRED_COUNT : >>> GET_SEC_FROM_SEG(sbi, overprovision_segments(sbi)); >>> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c >>> index 3201e2185fea..811e350a1430 100644 >>> --- a/fs/f2fs/sysfs.c >>> +++ b/fs/f2fs/sysfs.c >>> @@ -1313,6 +1313,7 @@ F2FS_SBI_GENERAL_RW_ATTR(blkzone_alloc_policy); >>> #endif >>> F2FS_SBI_GENERAL_RW_ATTR(carve_out); >>> F2FS_SBI_GENERAL_RW_ATTR(reserved_pin_section); >>> +F2FS_SBI_GENERAL_RO_ATTR(pinned_area_max_secno); >>> F2FS_SBI_GENERAL_RW_ATTR(bggc_io_aware); >>> F2FS_SBI_GENERAL_RW_ATTR(max_lock_elapsed_time); >>> F2FS_SBI_GENERAL_RW_ATTR(lock_duration_priority); >>> @@ -1525,6 +1526,7 @@ static struct attribute *f2fs_attrs[] = { >>> ATTR_LIST(max_read_extent_count), >>> ATTR_LIST(carve_out), >>> ATTR_LIST(reserved_pin_section), >>> + ATTR_LIST(pinned_area_max_secno), >>> ATTR_LIST(allocate_section_hint), >>> ATTR_LIST(allocate_section_policy), >>> ATTR_LIST(max_lock_elapsed_time), >>