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 65648EE49A0 for ; Wed, 23 Aug 2023 14:31:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 51834280077; Wed, 23 Aug 2023 10:31:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4C951280074; Wed, 23 Aug 2023 10:31:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3428A280077; Wed, 23 Aug 2023 10:31:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 23F49280074 for ; Wed, 23 Aug 2023 10:31:27 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id F0612A0177 for ; Wed, 23 Aug 2023 14:31:26 +0000 (UTC) X-FDA: 81155607372.07.C881B88 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2047.outbound.protection.outlook.com [40.107.93.47]) by imf18.hostedemail.com (Postfix) with ESMTP id 13CE31C0005 for ; Wed, 23 Aug 2023 14:31:23 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=kwxNDEMR; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1"); spf=pass (imf18.hostedemail.com: domain of ziy@nvidia.com designates 40.107.93.47 as permitted sender) smtp.mailfrom=ziy@nvidia.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692801084; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ItpGnLSvnJiWPDg6HVLSJzgDF8jfKnzWKOr+6SalmZw=; b=eScHpBlhXZNA+5XpGQyy6FosyWPqq5mlhV6apt5CkSK0Q11Ab9Ew874TM5ft4nePXgWoon RHUR7zCngCd+nhT9dqVnl7QTi6ImaGPLLQbSrgagP/oKotVwIqkCZOtglIvhR1afXIO+a1 pLxbcLI4FYmz1Ke3p8TWcydGM/getdU= ARC-Authentication-Results: i=2; imf18.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=kwxNDEMR; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1"); spf=pass (imf18.hostedemail.com: domain of ziy@nvidia.com designates 40.107.93.47 as permitted sender) smtp.mailfrom=ziy@nvidia.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1692801084; a=rsa-sha256; cv=pass; b=Ff7t8xM/BDEABmgftMWjJdGhegYYI8BGZoMEyHUW4Xn9p3flZZaS/63giAsA2lBIosvkne Wrkn6FJjZof2IveRYdIBFyTwAydNt7quYrGS20WRcq0daoVgAsf36Dfbt8B93AbgxcXjpN GuA8/I0xqePk//aK49dlXFytAFWR8Qk= ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z8TGcHIFpqr0yi2I3S2/OYWh4CSKkh0FJIKKAQjY+G0uvP6aTpgXndGnaIKDRtA4AjEcdZCwl9+hAy39+1szIs+7U6Gyz1MNwU4/+OYqGQ1xiQjA4aW2HvRm+JneA2SMwNQ/+iwu1hkrvxrXEunUML97y14bSr3guv3rcROMMMb6HhLrKZF41CAeF4JKktVraCdp72z6MXtPlvqEq1qwcVzKtwpVE+q7mzRoD00LT5HjEEXiXQZ2H+XqbTo5ttEs2QCZC4cgWOAISSZeeucJScqPLKHc7cJ8r+9ao6SJKvxkY7H816MKAyJxZPI3EoBNnd2WqavLMQm1S5aK2mqM2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ItpGnLSvnJiWPDg6HVLSJzgDF8jfKnzWKOr+6SalmZw=; b=Hwxtuoo1FZ4qn52p6CmnB1Bv/pmvi727jIfe1Jmh7TESQd7r7cwtlEFqetF5Q93s6vuBv3KwCcheVID8AOY1RlxVCXu2DsJ3UpsREe2dcDrCCbprmHbXRAViGLuh0aYZo6WmWQJrj9riwGFG2psxg66XzVLcHH7kx0xc5HUYnk8MhQzR9rFMIHnaoJbRki77/1aysSr2Ffr5gz0XcEecdaFJPOPLAdTrNZtvyKcEsUJ/SFh2nTiKw5HEfJ3/PI25CXhs2yqgknqPlqQmRaigBAqwzzkYo3epPRCtojm4+mEpleAW27IMs29mTpa7K11oyY1EZwtWURPBhtNY/6bykQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ItpGnLSvnJiWPDg6HVLSJzgDF8jfKnzWKOr+6SalmZw=; b=kwxNDEMRmVpX81d6SkOhfL+51GVkDzW/9N2FIi/HUFUk2bwb2SsC4LHGlkgFRRamNt6ajSk0bwGPRpB5CQ0lERFgYmuOMUec0418VBFjpD3dU+a8yiPkHSL3nRWhtKwSQvydxRC0IdcE+NHIxfmouCjKT9/n/IkOMz6gIGhGReQDlHQgQsZVmBqQ2G7BJ0/ZFAL/ab+Bq1H4sPW1n4JGK9C1YZwI4iHH92WYEN6Khgwu6X5hUREeKcunMkhJ0TY20EJML4XcVHECx3TYxyt5ykYn5nXZdMqyiPQvzzI/MoOS0qL5Ti6u5v+MLR8jhHdBoIB8sDTYJBfj6sE/trF9OQ== Received: from DS7PR12MB5744.namprd12.prod.outlook.com (2603:10b6:8:73::18) by DM4PR12MB6664.namprd12.prod.outlook.com (2603:10b6:8:bb::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.24; Wed, 23 Aug 2023 14:31:21 +0000 Received: from DS7PR12MB5744.namprd12.prod.outlook.com ([fe80::c166:b535:d93:641e]) by DS7PR12MB5744.namprd12.prod.outlook.com ([fe80::c166:b535:d93:641e%4]) with mapi id 15.20.6699.022; Wed, 23 Aug 2023 14:31:21 +0000 From: Zi Yan To: Matthew Wilcox Cc: linux-mm@kvack.org, David Hildenbrand , Yosry Ahmed , Mike Kravetz Subject: Re: [RFC PATCH] mm: use nth_page() for all memmap (struct page) position operations. Date: Wed, 23 Aug 2023 10:31:19 -0400 X-Mailer: MailMate (1.14r5971) Message-ID: In-Reply-To: References: <20230823030622.96112-1-zi.yan@sent.com> Content-Type: multipart/signed; boundary="=_MailMate_735D971E-9883-4B86-A707-62B1BEE3A10D_="; micalg=pgp-sha512; protocol="application/pgp-signature" X-ClientProxiedBy: MN2PR12CA0025.namprd12.prod.outlook.com (2603:10b6:208:a8::38) To DS7PR12MB5744.namprd12.prod.outlook.com (2603:10b6:8:73::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB5744:EE_|DM4PR12MB6664:EE_ X-MS-Office365-Filtering-Correlation-Id: fbd30b41-7ec8-4ac5-2901-08dba3e59efe X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jnscdU8BFfe4pdeo22ldXLkMSRIV7kgwabZRLS+Yg0uuIPLrauXT1bd7GySkdZcpOteiPepqXICTUOdgTVeYLin0jMAQkkzjnGFtbnX3j5wMcySlHDqMw1RCuWvjX56bLqDPkFZstHsUNHKwu+skRdnMCuNVY7/DhdYJH/oFkiAo0oipkLB7VweRyVjnfyv+h8pOT4gOkytYJ5egcwlYgkBn/0FEQBMsVrRGoFsLNGh/gWW6tGPxVX8kWvZeMlHrPoLikp69l443UoNOnrGMz+WkfXA2AgF3fE9fW50e42y+CiIvFoHzVqXorh9VIIviqOLf+S5FV6fthuhFzDgjJeRXk5vTgAVEEhTOdfg2PvJtSKG/qyCnKy6gFBr6vOoB5uPhNWVX9Xj3+mL7luve8wQjNIwKpuTW1IZIHYiokoUZ5bYc5sB39fgCW3y57HlluGMhbneFDihD95aiEdMq53Vsl7uSKDFShtLTha7Ib5NmeP9rVr+ADSdTtmMUreaFvO7Mq5IOg82UK5ZOQhmDdiAfnsGqsiSL3/gNnaowRZJ5K31BHRJmf7VtGS6Xgsb2JNbHpHaXYT9BKBV+cVcGRKUQ5UsdHwloMUK/ZDmOkeld/VBbpPQ/e2IEeMkDiM8UVbWIctjmJ6jI5PEw6jJKDw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB5744.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(396003)(136003)(346002)(366004)(376002)(1800799009)(186009)(451199024)(66476007)(66556008)(54906003)(6916009)(6512007)(316002)(8676002)(4326008)(2616005)(8936002)(41300700001)(36756003)(478600001)(66946007)(38100700002)(6486002)(53546011)(6506007)(2906002)(83380400001)(86362001)(235185007)(5660300002)(26005)(33656002)(72826004)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ngAipv64Oimv2uQgn5FYt1cBTTRlIvoyVUjSOCgdDqAyQ6T5iWpxjhtqzVY4?= =?us-ascii?Q?Xd3Qw4QIl2aezGFv46pbtp0G34zRWnkkv6GwSg3X9BdMG499KUipvF46UJDO?= =?us-ascii?Q?x+MeIYynlYsHiYOAxrRfE1NEyn5II725RlKdRPGHGnj4GFcHzmeZuX0JUaxd?= =?us-ascii?Q?+MKmqftLiSSF5Y1Qr5MnD89c4pETCJYnfMHQW/OyrF99Dr4M5aYdJE5zv8iE?= =?us-ascii?Q?Yb6MCIqQZcSSs00wcp38rhJKq7cOKumMONTtbR0ZcG5gPZozKbdl2mRIyRjd?= =?us-ascii?Q?1NET9vzFk6kakRot6+DLAsdk65YF0cUK2qVZJDZLxLnfBoK74D6n+9/jQv3z?= =?us-ascii?Q?SchMcunFWgU9lnRW7+9n32sGJuNDJIXL1xU4+8Zdmy+DK7XjyQpTk5I2HWx2?= =?us-ascii?Q?YP0ueKpCXXONuLTFlQ4fhRr6iXPCjY7u/arHWV5xcY5iNXKTNbzi9ozbjObY?= =?us-ascii?Q?/eXOj+Stj5xwd1XJmVb9D4HOu8SLIbPIP18V7dH5XooRNXm6oYkodxuNITMm?= =?us-ascii?Q?jxd73bvNGchzDvu5hRaGNuxJCRHJvKtL5XgTU5yj1UNmmuzi2WWBlkRj7hEB?= =?us-ascii?Q?aFoOfaXsMXY6xHJ7g8G63foqrouzV5GM9g2bJVzbEnWbFACNItJXUIIEpy19?= =?us-ascii?Q?/EnlcELGQ2amUZ8M1WMaFhS2afLSxuHu4xM1vgh1qq38IMH2sBI/Doew7laU?= =?us-ascii?Q?B+F53WYHvCBE/3GUIUJNP3Efk60WXEUhFVY8FOWxfh/lv569kO+Sw7ar4PAr?= =?us-ascii?Q?TsAqvULCq0p1jT8JhWA0kEZfbNZhZnabm1g0tyISadU6S4865T2eUEvM39Im?= =?us-ascii?Q?cTkhp5OoixFkogJnfsK+RBGQJobUUW0fjF65lJedllWvtzIP/cTbmmdJZEaf?= =?us-ascii?Q?qxEs92cXyAunjOO6AujTk013U6QHrJM7yQDyORUC0hAqPvBm92sbj/+VxAZO?= =?us-ascii?Q?OVo5vGbMOaYyTc+R6m9xgqcrvKiC8CdhhpI1CmveEXZ9cjXOCQP3SUWsKFiX?= =?us-ascii?Q?33NdEAGd7DKYs5GRxPxGb+fd+xH40Rio3b9Fl8LeRRcqxHpjuyxl6MD/Lnu5?= =?us-ascii?Q?hOQHjgQl/0iz+zWAmVaNtTIn6flQ69i8InAzPhsTjgxlCldZBC6Ir/8Nv/mX?= =?us-ascii?Q?RHnHA0JhVQYea6+YPpPI46Ua+kjZZqav/5CuJ8gjRAT54FdlmzBmoMZt+oJU?= =?us-ascii?Q?PNr0vjbPYGqXO1Xsc8l0//9grkCZFTnSHaOqn/U46ZlN/iQcAuMqPFr0eQi0?= =?us-ascii?Q?Z4kMwMDnrnl28YdLgPv2FlO1isznXnCWm3Gxvqh3fu5CEtnlyV6gby4qiwYf?= =?us-ascii?Q?47tEhQxUM7sSjdrXQhiYrJqkCbqVjWjpYYHATnBkktBDX2dy7liuzz3RH6Md?= =?us-ascii?Q?IVRNhEXHoWj1wiDYYPRKe8hUbZbs2eIJuX7A4zGDJN57u1wTqTaiyiN8O5Ug?= =?us-ascii?Q?hSeMhgh8F0RMmmlv50Lfrde+cAz7KGGG4gQ6cXSRkIij8oxwBgfne/iUo29T?= =?us-ascii?Q?riehHHI5Ltg6iLOhfFcEYPSXBcuXj1n9q72ef716yJZ/e9ZFmwmj+jdX7tue?= =?us-ascii?Q?3+mXzJrV236MqrCaMrembgeb+jQCukUgLx6CVmiV?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: fbd30b41-7ec8-4ac5-2901-08dba3e59efe X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB5744.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Aug 2023 14:31:21.5083 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +D2PTZXvCyxtYALdXFQ0xp5KAK3xxDLTiz3sjWRq/NET7TzL0wRngZGxSLCQUY+i X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6664 X-Rspamd-Queue-Id: 13CE31C0005 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: j71zwecrdcxhesiyoxctobnwxmbk661p X-HE-Tag: 1692801083-491724 X-HE-Meta: U2FsdGVkX18gS4Yg6JjtucwWnicdgMZ14MghbnHKf+tm7AT9JdBMJ4+Q29/hEabzIeTJ/jCoh/akvPynzyXpNM+pI5PwLg+nSrc6xERRqARbnDEV/NYz6Uqr/E3OT9gaKro9L/vjS9HnUltQdID3CO6BRXKJbQmNVVkUSDDSNdXjwt9Fu0e899BGVBhk9yT0gL9pHW0eurJpkOY4+Q4NAnu6IX6L9C8UUMPDy/DaVGF7PShlSyssO7ZwZMjplu19nbQopNvRErCscgGQCPNX8TKwiM5TmOTKt/+vEEe/tDv+HhOx4UGfiUzP8fe0HeH9YiSZ7PbD0DL7Du46rwQ0YJlhNCf85kvQhcJOxlsqs7mD8lmoKsWzhiE4r6ZfNpDu0B/gAT6KGohZpJiwu7JoFGMEmduFsefzN6Ly4bbsTUGDCaZ5Q/VMfpxaAdd72YK0OiQKWwRyQcRa8bwZLaMtqqjdRyat3d2yDScNBrdDNiAsIcAkYukxX8TlgPOx7FFBu5m71RGwZsXBR3HAzotZZyXcmT06QCNIBi8ii2gZLGArIPrnw1u2SPhFoSEw247LxrayRO8Ukwoqv/F6ivue4AvDpoC4XJCiKMwwqmkix+tWOC3uxNcv5LFpUsFaHfjqFmUptG4yeBN+3jbH+ENfndxV4NBna4LhHh/jAO1P9zzt8HqSNsGMABaL2Zf2ZN2FeJMLpb7LqCJABX1de3sutMal4fP9NNkBF/F5NAGnDGPrBPIiz5bmRB1AimF5KJ0caQWOetcPxSuckTclZZqpxLno3C2g15TrO6eHzD1PHT55bRydu1TlkSKnGZMPlawH4ACkGmOqRzvgTJpQ/9Fv5ENV9qtkOtBzaMfVxXxcEjPXFF32LyEoxSQz2NMFHA/PPTQfppC+VG6ttYRc2AF5Ylyhlpr0ZdUnY23s8FgQitFZs9mY38o5hvYZxJFyirMngaHuuMXD73PbL08E5ZC ycqnQRkw q05oXCCiPXyELggorerUva6wr9MpswZRt50PhWeY6ybkQwUhCdseJXFOdSoayjIf4VtbS7JRDikX7N+1E0AnE6UVENJu/CXo3SQ7hnsKQ2EXY1g4zKVdI0xDUxLqrHHWuZdRL88A4qL+hvlNl3sMFTqhZD65IjJHZ3nW3wMAsXqD4DLkUe8wn1vxmyKVJW9iOa/O/81q9oJiLi8LcuyN2wTwagGqSo4TQq3RnHACHbiP1j1Z2a7PakQWlkZakc/K/5FtiuYHKbj7SdKYu/zTD5Uuv7CC4rdttOU1znUsfUjoZydYnyQnh6QGsKNVi8fLf78HSGlKr4jEyzZzvQM73ajp4bD59Y0zrfMUdxXIzdnHwSnfO0HoykCSNm0KOuU+wAau9 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: --=_MailMate_735D971E-9883-4B86-A707-62B1BEE3A10D_= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On 22 Aug 2023, at 23:27, Matthew Wilcox wrote: > On Tue, Aug 22, 2023 at 11:06:22PM -0400, Zi Yan wrote: >> With sparsemem and without vmemmap, memmap (struct page) array might n= ot be >> contiguous all the time. Thus, memmap position operations like page + = N, >> page++, might not give a valid struct page. Use nth_page() to properly= >> operate on struct page position changes. > > This is too big to be a single patch; you need to break it up by > subsystem at least. And it's not against current -next; just the first= > one I'm looking at is wrecked by "block: move the bi_size update out of= > __bio_try_merge_page" from July 24th. Sure. Will break up the patch and rebase it against -next. > >> +++ b/block/bio.c >> @@ -923,7 +923,7 @@ static inline bool page_is_mergeable(const struct = bio_vec *bv, >> return true; >> else if (IS_ENABLED(CONFIG_KMSAN)) >> return false; >> - return (bv->bv_page + bv_end / PAGE_SIZE) =3D=3D (page + off / PAGE_= SIZE); >> + return nth_page(bv->bv_page, bv_end / PAGE_SIZE) =3D=3D nth_page(pag= e, off / PAGE_SIZE); > > I think this one is actually wrong. We already checked the addresses w= ere > physically contiguous earlier in the function: > > phys_addr_t vec_end_addr =3D page_to_phys(bv->bv_page) + bv_end= - 1; > phys_addr_t page_addr =3D page_to_phys(page); > > if (vec_end_addr + 1 !=3D page_addr + off) > return false; > > so this line is checking whether the struct pages are virtually contigu= ous. Got it. > > That makes me suspicious of the other changes in the block layer, > because a bvec is defined to not cross a virtual discontiguity in > memmap. Yes, just checked the definition of struct bio_vec and confirmed it. I wi= ll drop the changes to block layer. >> +++ b/fs/hfs/btree.c >> @@ -270,7 +270,7 @@ struct hfs_bnode *hfs_bmap_alloc(struct hfs_btree = *tree) >> off =3D off16; >> >> off +=3D node->page_offset; >> - pagep =3D node->page + (off >> PAGE_SHIFT); >> + pagep =3D nth_page(node->page, (off >> PAGE_SHIFT)); > > Are normal filesystems ever going to see folios that cross memmap > discontiguities? I think hugetlb is the only way to see such things. Right. So most likely only mm code can see hugetlb would need nth_page() = instead of direct struct page offset operations. > >> +++ b/mm/compaction.c >> @@ -362,7 +362,7 @@ __reset_isolation_pfn(struct zone *zone, unsigned = long pfn, bool check_source, >> return true; >> } >> >> - page +=3D (1 << PAGE_ALLOC_COSTLY_ORDER); >> + page =3D nth_page(page, (1 << PAGE_ALLOC_COSTLY_ORDER)); >> } while (page <=3D end_page); >> >> return false; > > Isn't this within a single page block? > >> +++ b/mm/debug.c >> @@ -67,7 +67,7 @@ static void __dump_page(struct page *page) >> int mapcount; >> char *type =3D ""; >> >> - if (page < head || (page >=3D head + MAX_ORDER_NR_PAGES)) { >> + if (page < head || (page >=3D nth_page(head, MAX_ORDER_NR_PAGES))) {= > > It's kind of right there in the name. MAX_ORDER_NR_PAGES. I was trying to be on the safe side. I also get your point that I probabl= y should only convert only if necessary. I will check my changes and drop unnecess= ary ones. Thank you for the review. -- Best Regards, Yan, Zi --=_MailMate_735D971E-9883-4B86-A707-62B1BEE3A10D_= Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc -----BEGIN PGP SIGNATURE----- iQJDBAEBCgAtFiEE6rR4j8RuQ2XmaZol4n+egRQHKFQFAmTmGDcPHHppeUBudmlk aWEuY29tAAoJEOJ/noEUByhU5iAP/2cqqw/DHt9rzGOFKzdZ/v8qTeSpN679fkVh zDJHD3ZRa8Zloy+5MovnBX1YZBHlpTVL/0DCDNBpTDYgW+apJXq46QyyZe+W5V7n XpvI+BIPCpsDoc7m+DNJWcuWuTZm6fGOhJZR/izXFQoFW0Ftfdr32ZvmFkt4zWSx Z+T2kryXqoGou62HwJ6kIIBhvW6vqty90iSpnEbGfT6zHqNcP3XgNLIC9AVkqaeR Btr6Ho/gXWFlRbRPJSPrsAcgl/UJ+4AibODFbfCgFQwcMKAkfNdx8SIvSYwBLwXw ss8BlEkXeq6sgSLpWz0Faich9eWDvyR5M+jOYqpxs3cFTjHWy8Rd/x/cWUYfyyjb GLj9I8/u+EdOBKTTeyg9plvcNq5WcdRkkGyK9SOCfgm3o1X0XcDFtY6LDtIS9b/7 szZ8qEMAOXcG3Z7t73JAGWroWs+Gj27KzSqzF1QwyIMRacBomHPtoORXexM/gcEE SCZHlQVLius9ZiyM44oouz+z1asGnOkIhC5RX3vYJ8UFC/GKQHzAyvH8QZDziha/ o//7lQQdaC+kgd6d66v6f3NK0D1Ki1G6rh5llxmyJkOqteQX7RU+rhBf7g4TLPbV r8sSrR1gWlajYuI4flOIVFnUCDkV7w3UG2X7kEk4APg89fX60VuluWLeW+Rh8Fp+ 4dimon2/ =EN45 -----END PGP SIGNATURE----- --=_MailMate_735D971E-9883-4B86-A707-62B1BEE3A10D_=--