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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7C728C02182 for ; Tue, 21 Jan 2025 18:39:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E0CC66B007B; Tue, 21 Jan 2025 13:39:10 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DBC2F6B0082; Tue, 21 Jan 2025 13:39:10 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C8EE46B0085; Tue, 21 Jan 2025 13:39:10 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id AB1E36B007B for ; Tue, 21 Jan 2025 13:39:10 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 418AD140EEF for ; Tue, 21 Jan 2025 18:39:10 +0000 (UTC) X-FDA: 83032321260.21.28022B0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf17.hostedemail.com (Postfix) with ESMTP id A041F40016 for ; Tue, 21 Jan 2025 18:39:07 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=hf65xgGy; spf=pass (imf17.hostedemail.com: domain of david@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1737484747; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=H4N4JMCG9++GTpITpYBzd8Vd01mtwfNvPlcVMGG/Lpc=; b=cpzAhv3VT9bFLRZzqTHxWXlY2g9eIHisD7AjW9oAP7/HwabTZtv8APEuHMsAzLjbJJ0wnp pASClwtohUz1HvqnPfLkaJQisEBsuA9ov875v4XvOT9K4El9PjE2hAVlbN1+t3JruDwuDf YgTMXfj1yjy4Ii4dOcDposkRPTvE4WI= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=hf65xgGy; spf=pass (imf17.hostedemail.com: domain of david@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1737484747; a=rsa-sha256; cv=none; b=sLDVfueNpDKaYcce4hh5Je+Tvs3fYbx+G6yQx5+IVUcRRbREHDxodVFHiNkHnkpk9Prn8p hhovjMvlh8FfLf7WJHZivlBAB3ssJIHjcn9B5if7U9gvB6EC5nZXbqSyJlbwBlFPOQQ5rR lH1eOlVdg+4Swh0frl9k8jVCxdyj2wU= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737484747; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=H4N4JMCG9++GTpITpYBzd8Vd01mtwfNvPlcVMGG/Lpc=; b=hf65xgGySlG6eKWYknTGDZIXyU/3KqO+2+IWyNfxynR8PQEe/LGUXzHFwqrQE3t467pGp1 6N5L4L3AgPD2P12HKwjdeTFdRGpY90RAeHS07xz1xboyZ4Hd5Qi2zHz4XMhTeE5qrMuod4 TBGUspF80sH/DxmRDVuHCJ2o5aZfzMY= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-691-iUb5cSzrOyOkyARlpLDBQQ-1; Tue, 21 Jan 2025 13:39:05 -0500 X-MC-Unique: iUb5cSzrOyOkyARlpLDBQQ-1 X-Mimecast-MFC-AGG-ID: iUb5cSzrOyOkyARlpLDBQQ Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-385d52591d6so15215f8f.1 for ; Tue, 21 Jan 2025 10:39:05 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737484744; x=1738089544; h=content-transfer-encoding:in-reply-to:organization:autocrypt :content-language:from:references:cc:to:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=H4N4JMCG9++GTpITpYBzd8Vd01mtwfNvPlcVMGG/Lpc=; b=H0XFBj/CodgvPNJEPse76xTyUaiua1veVfSB8B3m3ekoYPSMfzKAOSmQTCBsUqw3um iCKP8Taqg4HDBdUZZz7cUErciKcvBUTrlKmyMqvroL6GFH2j+wSzBmrgru2Oe5gdBugE VAk0w2OI1JNIx62JGZcEwIHRj/4/z7jFnaMvUzoTz5vIbDw94kkL9fKXw0A33x9LRM1S 8rS2e+uMBPTiP/2x7ytO/Y0c4SxzCE8dS1r6t/QXFCbGVfpxkA5y8+gu3MvAUqbIaWK4 /jKpukrvOszRPk/JCpmNDSISsemclSSc2ACEf+YVDk9yij709ozs4ADXb9pMa2af0rKL vllg== X-Forwarded-Encrypted: i=1; AJvYcCWGuHUpTBtRjultVKL3gh/hIoyaE51TeY8YIRaXOjMesmVKfP+av6p8iu66C2ga84Blp5Ft0R8uDw==@kvack.org X-Gm-Message-State: AOJu0YyfsGQKKg6g7sbn8Y8krSMrCJOCttzldHKn0cNYFOEqX1mC/yNi yGVRGRKWOwg6A5thaPy9aedM435W6mdNhsAfEX9NYxONVQyuV7kxLLftHLGPRcRkBCdORCtaio0 TuZNjcufk+a0Yk7NXTVVPHg+3jwYSXtt3KY5W/b5LBvprh9Dk X-Gm-Gg: ASbGncv2OoLgsOiBNlzoYoAILjSbyI7w0IBjAnJfScV4oxgBchANs1aZOXjzIrXXtO6 eXUz49FSWbCdC6L83i2Vg+TBggf3xxdc6f5vaxLvHKLrYngMFS/gk73EXCWFgTBK31SknBVIQiw u1zHp3Snnv5BQeQGg5sFk5akVrirmAeVnlEV61ogEu9f5GlmxWMTLMtFEhmUVIpQJ0XS4t8Y9mL AJ71kT5X9bp8erj8pfLPG1gAZzsRWPYLA7WFcDNquXFG71vnLIjbv3/nSm8Honq4jrg9fNuQ4l2 QhSzCsH2mzDAwLcnBAd1+EYT6cl5hx2ypR5Xx8QvfPz3u2wJH3Dipcm/0kSPn8UQ3xPFbd8epps 9c/nC4UjkejFa0fKYzfuaig== X-Received: by 2002:a5d:5f4d:0:b0:38a:a117:3db0 with SMTP id ffacd0b85a97d-38bec4f5f5bmr19777259f8f.3.1737484744520; Tue, 21 Jan 2025 10:39:04 -0800 (PST) X-Google-Smtp-Source: AGHT+IEWiaT66IYOwIFvcUglTIiyBPRnrtA9D0AyrHekT9SYse7BCB3BF1lX3piBTGBLvjSmLPIYMQ== X-Received: by 2002:a5d:5f4d:0:b0:38a:a117:3db0 with SMTP id ffacd0b85a97d-38bec4f5f5bmr19777250f8f.3.1737484744174; Tue, 21 Jan 2025 10:39:04 -0800 (PST) Received: from ?IPV6:2003:cb:c709:6200:16ba:af70:999d:6a1a? (p200300cbc709620016baaf70999d6a1a.dip0.t-ipconnect.de. [2003:cb:c709:6200:16ba:af70:999d:6a1a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38bf327556dsm14108133f8f.71.2025.01.21.10.39.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Jan 2025 10:39:02 -0800 (PST) Message-ID: Date: Tue, 21 Jan 2025 19:39:01 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 2/2] mm/damon: introduce DAMOS filter type hugepage To: SeongJae Park Cc: Usama Arif , akpm@linux-foundation.org, damon@lists.linux.dev, linux-mm@kvack.org References: <20250121175259.42535-1-sj@kernel.org> From: David Hildenbrand Autocrypt: addr=david@redhat.com; keydata= xsFNBFXLn5EBEAC+zYvAFJxCBY9Tr1xZgcESmxVNI/0ffzE/ZQOiHJl6mGkmA1R7/uUpiCjJ dBrn+lhhOYjjNefFQou6478faXE6o2AhmebqT4KiQoUQFV4R7y1KMEKoSyy8hQaK1umALTdL QZLQMzNE74ap+GDK0wnacPQFpcG1AE9RMq3aeErY5tujekBS32jfC/7AnH7I0v1v1TbbK3Gp XNeiN4QroO+5qaSr0ID2sz5jtBLRb15RMre27E1ImpaIv2Jw8NJgW0k/D1RyKCwaTsgRdwuK Kx/Y91XuSBdz0uOyU/S8kM1+ag0wvsGlpBVxRR/xw/E8M7TEwuCZQArqqTCmkG6HGcXFT0V9 PXFNNgV5jXMQRwU0O/ztJIQqsE5LsUomE//bLwzj9IVsaQpKDqW6TAPjcdBDPLHvriq7kGjt WhVhdl0qEYB8lkBEU7V2Yb+SYhmhpDrti9Fq1EsmhiHSkxJcGREoMK/63r9WLZYI3+4W2rAc UucZa4OT27U5ZISjNg3Ev0rxU5UH2/pT4wJCfxwocmqaRr6UYmrtZmND89X0KigoFD/XSeVv jwBRNjPAubK9/k5NoRrYqztM9W6sJqrH8+UWZ1Idd/DdmogJh0gNC0+N42Za9yBRURfIdKSb B3JfpUqcWwE7vUaYrHG1nw54pLUoPG6sAA7Mehl3nd4pZUALHwARAQABzSREYXZpZCBIaWxk ZW5icmFuZCA8ZGF2aWRAcmVkaGF0LmNvbT7CwZgEEwEIAEICGwMGCwkIBwMCBhUIAgkKCwQW AgMBAh4BAheAAhkBFiEEG9nKrXNcTDpGDfzKTd4Q9wD/g1oFAl8Ox4kFCRKpKXgACgkQTd4Q 9wD/g1oHcA//a6Tj7SBNjFNM1iNhWUo1lxAja0lpSodSnB2g4FCZ4R61SBR4l/psBL73xktp rDHrx4aSpwkRP6Epu6mLvhlfjmkRG4OynJ5HG1gfv7RJJfnUdUM1z5kdS8JBrOhMJS2c/gPf wv1TGRq2XdMPnfY2o0CxRqpcLkx4vBODvJGl2mQyJF/gPepdDfcT8/PY9BJ7FL6Hrq1gnAo4 3Iv9qV0JiT2wmZciNyYQhmA1V6dyTRiQ4YAc31zOo2IM+xisPzeSHgw3ONY/XhYvfZ9r7W1l pNQdc2G+o4Di9NPFHQQhDw3YTRR1opJaTlRDzxYxzU6ZnUUBghxt9cwUWTpfCktkMZiPSDGd KgQBjnweV2jw9UOTxjb4LXqDjmSNkjDdQUOU69jGMUXgihvo4zhYcMX8F5gWdRtMR7DzW/YE BgVcyxNkMIXoY1aYj6npHYiNQesQlqjU6azjbH70/SXKM5tNRplgW8TNprMDuntdvV9wNkFs 9TyM02V5aWxFfI42+aivc4KEw69SE9KXwC7FSf5wXzuTot97N9Phj/Z3+jx443jo2NR34XgF 89cct7wJMjOF7bBefo0fPPZQuIma0Zym71cP61OP/i11ahNye6HGKfxGCOcs5wW9kRQEk8P9 M/k2wt3mt/fCQnuP/mWutNPt95w9wSsUyATLmtNrwccz63XOwU0EVcufkQEQAOfX3n0g0fZz Bgm/S2zF/kxQKCEKP8ID+Vz8sy2GpDvveBq4H2Y34XWsT1zLJdvqPI4af4ZSMxuerWjXbVWb T6d4odQIG0fKx4F8NccDqbgHeZRNajXeeJ3R7gAzvWvQNLz4piHrO/B4tf8svmRBL0ZB5P5A 2uhdwLU3NZuK22zpNn4is87BPWF8HhY0L5fafgDMOqnf4guJVJPYNPhUFzXUbPqOKOkL8ojk CXxkOFHAbjstSK5Ca3fKquY3rdX3DNo+EL7FvAiw1mUtS+5GeYE+RMnDCsVFm/C7kY8c2d0G NWkB9pJM5+mnIoFNxy7YBcldYATVeOHoY4LyaUWNnAvFYWp08dHWfZo9WCiJMuTfgtH9tc75 7QanMVdPt6fDK8UUXIBLQ2TWr/sQKE9xtFuEmoQGlE1l6bGaDnnMLcYu+Asp3kDT0w4zYGsx 5r6XQVRH4+5N6eHZiaeYtFOujp5n+pjBaQK7wUUjDilPQ5QMzIuCL4YjVoylWiBNknvQWBXS lQCWmavOT9sttGQXdPCC5ynI+1ymZC1ORZKANLnRAb0NH/UCzcsstw2TAkFnMEbo9Zu9w7Kv AxBQXWeXhJI9XQssfrf4Gusdqx8nPEpfOqCtbbwJMATbHyqLt7/oz/5deGuwxgb65pWIzufa N7eop7uh+6bezi+rugUI+w6DABEBAAHCwXwEGAEIACYCGwwWIQQb2cqtc1xMOkYN/MpN3hD3 AP+DWgUCXw7HsgUJEqkpoQAKCRBN3hD3AP+DWrrpD/4qS3dyVRxDcDHIlmguXjC1Q5tZTwNB boaBTPHSy/Nksu0eY7x6HfQJ3xajVH32Ms6t1trDQmPx2iP5+7iDsb7OKAb5eOS8h+BEBDeq 3ecsQDv0fFJOA9ag5O3LLNk+3x3q7e0uo06XMaY7UHS341ozXUUI7wC7iKfoUTv03iO9El5f XpNMx/YrIMduZ2+nd9Di7o5+KIwlb2mAB9sTNHdMrXesX8eBL6T9b+MZJk+mZuPxKNVfEQMQ a5SxUEADIPQTPNvBewdeI80yeOCrN+Zzwy/Mrx9EPeu59Y5vSJOx/z6OUImD/GhX7Xvkt3kq Er5KTrJz3++B6SH9pum9PuoE/k+nntJkNMmQpR4MCBaV/J9gIOPGodDKnjdng+mXliF3Ptu6 3oxc2RCyGzTlxyMwuc2U5Q7KtUNTdDe8T0uE+9b8BLMVQDDfJjqY0VVqSUwImzTDLX9S4g/8 kC4HRcclk8hpyhY2jKGluZO0awwTIMgVEzmTyBphDg/Gx7dZU1Xf8HFuE+UZ5UDHDTnwgv7E th6RC9+WrhDNspZ9fJjKWRbveQgUFCpe1sa77LAw+XFrKmBHXp9ZVIe90RMe2tRL06BGiRZr jPrnvUsUUsjRoRNJjKKA/REq+sAnhkNPPZ/NNMjaZ5b8Tovi8C0tmxiCHaQYqj7G2rgnT0kt WNyWQQ== Organization: Red Hat In-Reply-To: <20250121175259.42535-1-sj@kernel.org> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: yVk7SsYTzmZiVn5IHRyCKptVwyBUnf8QKQtd3yOqbjc_1737484744 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: A041F40016 X-Stat-Signature: d748pg6ournauj71fcxuxap9mu5ubc7s X-Rspamd-Server: rspam08 X-Rspam-User: X-HE-Tag: 1737484747-570586 X-HE-Meta: U2FsdGVkX19Mefgi0Vrf4Rw4deEJnS0Pe+iFJVSjQ3D+gKYWLuKOY3jT899YldPZvZyJUM15FtTxqY81woT64fmJ/a8VHYGNHeQvlkgvKwRn62GLlYMGffiaP60XSsUyYxrUv5mU06+xPfHyNnkN4X8seZWb8n8VqjuKvGbOMj7KZWAwvENcBZGB9gb6nb6MMiTdSpPQKFOBP7dG7grpkQv0K7qg4okaDsTV7h5KgRhnNJkrwv/54VKHPD/zgWyskfZh+T2NU0AfYuLSh7CvOPgW+UBfoPolC6GEu8iKTekz+eLLFNS3d+dOAuOK1MNuQC5MVOxiOhW1vx2TjBgqjdOY0/JvQorzGLf+F36QOLK+LC/CAR87DlB1XYz4EsS97IIlo46kDrwhmD1vW5jBLqJq8maqmowTcaqQBBoV0JIEpaDgo14nXaFhS+TMnT4qvHlrNabfX32ZvXMbAfLwAEz7M+BgzzL1NcYdBTaSeLFibI9hYyIVusnTnqh27NqjbgM4a+UMgHRCLpH45KX554VZAOOsofed/O4HdAezW1NWXMO1lKoaS7gIQNgspgHthlfk9EEpcdUzh53pOlz7ZECPqUhPJbD5rOq/Ui3i2S/leSICieukzypU3GAQgQpFuGj0BNtbJtuA86HpfUBE1NCWMWSHyMmV31eHJ4HpEl3KChNs6Knta55sibOm4kNbb+FrOB86J9HX/WITLFUbYVO6E38ZEZbYI0hAP06hM4L+lJrLgSIZox7O3NUzGnUHPMCeABUBC7MRHynz1yFYu7oqMpCiiEJcd1/HhxLtaucv2PzcOxi44oATUm8Kpq5fC/WC/bDa8sBhsBbsQNfmw1jLOXLPg6rVFnlbueKbRxk4h64Id03t5ewc7O9Gjsns1Ji+h3+CdV6zZf9dPw6CU8if+LD3rwwxy+a/DuDGks9hDe0rXsPaUhkFoXXvphfcIQH7fW9M4BhWDbG0g7j A2t8FKED CpHxytaHuIR2sxmphTEWFDLg868MjCOY2dmJfqbu+otcTvHKzPdkxgYmaL+FT1saTU22Jv8eBomvvCIKhxpbSPIUISFkJ6NZFGMPny1n+/oYOEgAib67XOMeSbqcTmCN7b9EM4O4Y5x51FZHl9ukxtfJRn9yXwTAkGJnbP2TnUu9RlZ0OQMsgeoHfYkoXJ2WeimYRONOVXUKCTYXeeNvYxIE90SaXl0RS1xJrJCbY0XlJ1OVSQOJ2L38BvwObuWf4ka9sOzffIIeGtAYFWF2rhLO5tjLdL+R++qw11fHzeb19+98afEGR9ze634hpsqxVdKZ/r42wwdAfmiDuGfWwt+d2IvQlsQtpvpXguetTifJkGznSYz7gwLN0Vo7dp3vLZ5swUt4gy7bJ7ObkCNBdiHFS0+t2nOS6GV2/uIoLqPsXcQ63Ryifzhgo+Tlv5ADi7QpyHcYD97y059Y= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On 21.01.25 18:52, SeongJae Park wrote: > On Mon, 20 Jan 2025 21:03:05 +0100 David Hildenbrand wrote: > >> On 20.01.25 20:58, Usama Arif wrote: >>> >>> >>> On 20/01/2025 19:30, SeongJae Park wrote: >>>> On Mon, 20 Jan 2025 20:23:20 +0100 David Hildenbrand wrote: >>>> >>>>> On 20.01.25 20:16, SeongJae Park wrote: >>>>>> On Mon, 20 Jan 2025 19:57:10 +0100 David Hildenbrand wrote: >>>>>> >>>>>>> On 20.01.25 19:19, Usama Arif wrote: >>>> [...] >>>>>>>> +#if defined(CONFIG_PGTABLE_HAS_HUGE_LEAVES) >>>>>>>> + case DAMOS_FILTER_TYPE_HUGEPAGE: >>>>>>>> + matched = folio_size(folio) == HPAGE_PMD_SIZE; >>>>>>> >>>>>>> >>>>>>> Can we directly embed in the name and the comments/docs that we are only >>>>>>> talking about PMD size (both, THP and hugetlb)? >>>>>>> >>>>>>> DAMOS_FILTER_TYPE_PMD_HUGEPAGE or sth. like that. >>>>>> >>>>>> Nice suggestion, thank you! And we might later add more filter types for >>>>>> different size huge pages. What about extending this to handle more general >>>>>> case, though? That is, we can let the filter receives a range of the folio >>>>>> size to match, like DAMOS_FILTER_TYPE_ADDR does. Then, the filter could be >>>>>> used for any size of interest. >>>>> >>>>> That would probably be future proof: either a range or explicitly >>>>> specified sizes (ranges?). >>>> >>>> DAMON supports installing multiple DAMOS filters. So multiple DAMOS filters >>>> that each matching single range can be used for the multiple sizes or ranges >>>> use case. >>>> >>>> >>> >>> Does creating something like schemes//access_pattern/page_size/{min,max} >>> sound good? with the default value being pmd size? >> >> "page_size" might be misleading. > > Good point. I'm suggesting to add the files on another directory, and > apparently Usama agrees[1]. So the term "page_size" will not be used. > >> Not sure if we want to use the word >> "folio_size" here, so far it's more an internal detail that evolved from >> compound pages. >> >> "hugepage_size" would at least match /sys/kernel/mm/hugepages/ and >> /sys/kernel/mm/transparent_hugepage/. >> >> But if you would also support "single page" == e.g., 4K, "hugepage" >> would be wrong. > > Again, nice points, thank you for letting us aware of this. We could error > users if they try to set <=PAGE_SIZE filter range. FYI, DAMOS filters supports > making the filtering in/out action for not only condition-matching memory, but > also not-matching memory, so it will still be able to be used for filtering > in/out base pages. > > That said, I now think "folio_size" might be a better term that allows simple > implementation and flexible usages. The issue with "folio" is that it is mostly a kernel-internal name for how we currently manage metadata for all pages and compound pages. In the future, some of what we call folio today will no longer be called folios ... as soon as we dynamically allocate "struct folio". -- Cheers, David / dhildenb