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 X-Spam-Level: X-Spam-Status: No, score=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B7AEDC43461 for ; Fri, 14 May 2021 08:35:56 +0000 (UTC) Received: from ml01.01.org (ml01.01.org [198.145.21.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6762561451 for ; Fri, 14 May 2021 08:35:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6762561451 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=fujitsu.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-nvdimm-bounces@lists.01.org Received: from ml01.vlan13.01.org (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 20874100EAAFE; Fri, 14 May 2021 01:35:56 -0700 (PDT) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=216.71.156.121; helo=esa11.fujitsucc.c3s2.iphmx.com; envelope-from=ruansy.fnst@fujitsu.com; receiver= Received: from esa11.fujitsucc.c3s2.iphmx.com (esa11.fujitsucc.c3s2.iphmx.com [216.71.156.121]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id B7EF0100EAAFB for ; Fri, 14 May 2021 01:35:53 -0700 (PDT) IronPort-SDR: MXMO6ialDwCcnsCgsZW5zH2ZtdJqvk5igowgO1omu/MVHzdfUZz4xog0s7wt/2gOC2V4Abbxeh nap91H6pnOQhI0jsi3fd8NYHxG/bVCFNyf7pC1LwWw7Q+DICGgwW/7VGxgsfWN8jHAe3561WvQ ZBAXBI/OzN/JaKR8IOBE/lqGnJSPgzbE860wf2oIQ0FM6vIe8DZV5SbyHMFnqHGhOSxyaBKOGl QXNyri1uKFiGM0uNmUry7iarQ7G9i9iDVseqxgB90qofF4d+uwHQd7yDO4Lv8BcL+LUOPIIrKp eh4= X-IronPort-AV: E=McAfee;i="6200,9189,9983"; a="31440383" X-IronPort-AV: E=Sophos;i="5.82,299,1613401200"; d="scan'208";a="31440383" Received: from mail-os2jpn01lp2054.outbound.protection.outlook.com (HELO JPN01-OS2-obe.outbound.protection.outlook.com) ([104.47.92.54]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 May 2021 17:35:48 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YN5BVZc9GkT++JwAeLbRLjOhUfdz1N4nk6OmsGpIgMu8Gv2pTn0xVo+CmQJSK77+gHsTidkfi85KmzZgdASr3W8fKGAnyaDkKio+XqCaQ1WddHFVQCsvl478yBAf451Ejw30swDktw6Ulq5S/JbTh4vVxycwfpt+nb7ZkUmBRR/pS10lLJjbrrOk2PzMr6Legb2nTykw+leOvZPu+2xW67177P0+k4DvnrfmUE0YnpQ79Fbb74IeLCdeQUjBLJyPeGzSm3BLqpBHUKAFdyWiLUfZt7l29IcJT/IUUc0FhBxdRbWb0cVCvMV/vnCZob6UBQft1jTOtNYvv+aBAMwPsw== 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-SenderADCheck; bh=bQis9JXWTanLDkzD07MqWb13eQqYhbpqdNLmhTqhZzA=; b=eARHYzQ6tzQAq7DKqhl0UNUx67WT8We7Gw3NGU4TnQtwUQCoR6i3qqPh6EiSwDo5J+g+9CyxsZ0o4gMF38pyTbQR+sAweTGDUmv3qmHbL4iWjCIt4ahpm0TGIOApR6h3ND5/TUaawRI+C80h+RMbis714waLoCp/LAQRty0wEWbeUeeBvohoRjQgt9zQ6wPGT81uTwOgG62debYTL0DYkxJO/3oPoZg/mK+vE2nOpYgq/59ySpjxcQqkejPgXKs56ZwM03tywaqIdWeM18xdLHMVngiRuM5CZkkuX/xcdZ695O+qMcjdED+SsVJre9/LrufzxJbIus9Bx6ENWIlGMA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fujitsu.onmicrosoft.com; s=selector2-fujitsu-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bQis9JXWTanLDkzD07MqWb13eQqYhbpqdNLmhTqhZzA=; b=rQ3GgfVgq6v/+bkzXwjquV+eoMJ5v7v5hje7qttQCDNu4iW1M6yiJX+tXnvX6YafREA0KQJ+ofx2WPjFkvN44l3cj6J1OBW9BT8Q7roJ7whoSXA9zWuEG0FMYtkxQkFJmJUOcQ3Ze+F3/5O2F4yZjwHj7RPoX4XYzpDQ5VyQiT8= Received: from OSBPR01MB2920.jpnprd01.prod.outlook.com (2603:1096:604:18::16) by OSAPR01MB4963.jpnprd01.prod.outlook.com (2603:1096:604:37::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.28; Fri, 14 May 2021 08:35:44 +0000 Received: from OSBPR01MB2920.jpnprd01.prod.outlook.com ([fe80::b985:8239:6cf0:1228]) by OSBPR01MB2920.jpnprd01.prod.outlook.com ([fe80::b985:8239:6cf0:1228%7]) with mapi id 15.20.4108.032; Fri, 14 May 2021 08:35:44 +0000 From: "ruansy.fnst@fujitsu.com" To: "Darrick J. Wong" Subject: RE: [PATCH v5 5/7] fsdax: Dedup file range to use a compare function Thread-Topic: [PATCH v5 5/7] fsdax: Dedup file range to use a compare function Thread-Index: AQHXRhM6cq5EsgJhOkif8HCLojlGfKrfDrUAgAOVHuA= Date: Fri, 14 May 2021 08:35:44 +0000 Message-ID: References: <20210511030933.3080921-1-ruansy.fnst@fujitsu.com> <20210511030933.3080921-6-ruansy.fnst@fujitsu.com> <20210512012336.GU8582@magnolia> In-Reply-To: <20210512012336.GU8582@magnolia> Accept-Language: en-US, zh-CN Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=fujitsu.com; x-originating-ip: [223.111.68.150] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c052c9b3-3775-4a7b-d549-08d916b34427 x-ms-traffictypediagnostic: OSAPR01MB4963: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: qrjU2DWtJowbvqrVEMw5BeGclPkd/eHdZQwjJhDZoijK+nf7n0+0oS4UbZt6uogoS+1yN9+n2blvbFU769ZdF1sFHNCvQZJ3cm7i9zZdY6EirZ/5jmUaMey70xtB0AfFy4MrgxJpETGkzXbj1Ssqeo8w4EabjpD6EIxo3PUVjwQO7Ys05ZHkRTSrZGv/c5ehdTtspPFOxYrWrmIgxymBNx3dR+dYyt2DWC8mzJmvT9YDwjCNZmI4qm1hjHcydzkBwTASFqYdPoirn8aFdMhLNqJB6qec8bsm8eT71+lu1FvM7urhOz616PkI/nHXN9+jG6qq3vo6gzbuIq8yCCcCS5DWT7jBIys9txIfv69BF1DDiR82PT9y3FGQuXM9DTSUwutIAHGC7E3Zl6jJOd2lONJK7Mrf7R3YaWy6slzq1wCNyQogVyIG1iFfZekBZiZnqQaJf+Uir5FxHdo4O9Ng3UZ6k0YqzsNlwC8n5OXvoeYc5QG5gxr1LFCMNYMONlGNaiW/hazMaRExh/w6AZVQFhfhOlMS1inARW74ZemAGwJ9mTIuXlqY3NgV4pvj83Xl1aUuY0eAFK6XGn+gvOzeZOVKFVU+FFN6l2/V209qP+0= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OSBPR01MB2920.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(39860400002)(346002)(366004)(376002)(396003)(9686003)(83380400001)(38100700002)(7416002)(55016002)(30864003)(6506007)(86362001)(122000001)(85182001)(52536014)(186003)(5660300002)(6916009)(33656002)(478600001)(26005)(66556008)(66476007)(8936002)(64756008)(7696005)(54906003)(2906002)(66946007)(76116006)(4326008)(71200400001)(316002)(8676002)(66446008);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?gb2312?B?LzR2b3RhdmxERmV2UkJGNmN0Ylc2dmN0Q1pJSHc4bFFPYXZoeWVMcUVzK0Ro?= =?gb2312?B?WEhXQm5jQkUrOHY0WktNRDlNejY3TnMyK05vM3I1djVCb01zSW5QRWRyeks5?= =?gb2312?B?Y29hYnZDa3k4SFNCOVQxL3dkTUpaSjJzbDkzUVl1b1puWDZqVnBDSDh5MEww?= =?gb2312?B?QVBqcHJWYnJMTXNzcUpQcnBkUGNrMDl6ZzhOMVJGL0dlWVZoclJ0NVJISUhP?= =?gb2312?B?SnJBM2RSNzNlSi9EV1M4YjZBemRpaktJTnd5ZTJ3bFMzODlJSmJRWEY5K253?= =?gb2312?B?UjdLVEdYUFEyT1Rqd2xHbHpXcHFSNUJPWXRHcE9PQ1dMTFlzdXorQU96c1FG?= =?gb2312?B?QjFMOEdRWFJsY3JzRnh4UUFJUUdNM3RvOTUxMmVUQ0dIV21JOE9qMGRHbXA1?= =?gb2312?B?azBMdHMyQlhnVzdSTWNuWTA2STVSWDBpOFlWZTlJOUNCa2pNZURMMnFVcWdo?= =?gb2312?B?ZzNvWVNnY1Y1L2RqeThnd1ZFTy9IWWV0elVHZnVtc0U0c1g4WHdDdERvY2xY?= =?gb2312?B?RnV0eDVqb2wvVTdjbmplZUF0L0ZaLzFqMi9HYVBuWVJwQWliMU5TMGlPa2pp?= =?gb2312?B?bGJubkg3NVNmdkNKenVQRXpIK3lvTmFlb3pzeDhQeTF6MUNNbFkxWmhSeHpC?= =?gb2312?B?SkJVVlppWFhTMGwxaklVSmNGaThqNGVNUWRrSjFhdVJjU3drSGwwWGRrVXVS?= =?gb2312?B?V1FLa0Yydy85SUsvZUxGa1ljNTJkcm94NlF1TTlDRGo1SFRYZkhsMHg4eUdQ?= =?gb2312?B?ZkF3VDVxRWQrbmh4eTk1OGlIZEZvVjlmTDJMeG8xeTFCT1N6ZWp3VS9kZVZz?= =?gb2312?B?b2JyZ2JhRnlic3Foa3lrdHJHT2FkT3FyTnF3bkUzazA4M2JvRm5pY2dpdVN1?= =?gb2312?B?cmZpelI5V0dmdGc3Q0t0QUFOak0xcmJ2MGJ5ZzFQMU95b2VCNDdkV1pUbkZ4?= =?gb2312?B?LzByN1ZZWWRoZG5FNGdsOWRzczJVZmdNK2tmdVRNUXg1RkdLZmZmanRlbnRN?= =?gb2312?B?bFpCRU83UmQwSCtZMWwvKzd0blQ1UGJNdnJ3ckJBaU5mWEtnN3BRa1poVXRy?= =?gb2312?B?b1FjU0YxTUhkWmdVVUx0TVA1Z1ZVUDhvNG1tRHBRd25vQ1pSaXZXTVhWMWNJ?= =?gb2312?B?WTdqWHJJNlFOQjVCYlFLK1RmQ25sNGFuZ1MzanEvZ25XazljTmRPVndXOEo4?= =?gb2312?B?WFI0dDFnNVpJWkFwMU0wS1JaVWdqOTdwVGh5TGpNczNyMlduSjFQcE1UamdG?= =?gb2312?B?NHMzWTlHdXNyb1RwaW05TXpLN085QWViK0NEby9FeHRReDA4TUt4cVVBbGds?= =?gb2312?B?TmFPWDdjMU5lakxQelFsYVBSL2ROVjR5Z1hlTVFNbSs4QmFuN0JhQTRjaVdQ?= =?gb2312?B?b0pTRElRcWRkRnFuUjhrT2VSVkhQV3VpM3VXZHFxUEl1UDc4dUxXV2oxdFFa?= =?gb2312?B?ZWFFdHl1WThyVUVEQlY1K1JZeDd5cXpFQ1dURlMwZmhicHhhR3F2d2J0UWk0?= =?gb2312?B?SFpRZzVyMEtoMllFV0Fpa2NnclRvdzlYcEFhYzJ1eVBZbENmZlVrNkpaL2dN?= =?gb2312?B?bCszaFlRQ25zd2JYY3crMWRKUU5PbmlkblRIc3pmN3RVblFMZ0UyVzhqem5L?= =?gb2312?B?SWlaSnhJVndTWkI0UXlHMThoTmxYQjFFUWM2NGNleVJTU1k5ZjR6ZlNidUl3?= =?gb2312?B?WmpwRlFndXk4WXNuOGJ2c0RIcHhoSHVsNHRXcjhEdnRNbStpMmhUWWJWdXVO?= =?gb2312?Q?9jJoqdm6tRA8r2lT4y1sCubYZwUHCuc3OfnQEib?= x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OSBPR01MB2920.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c052c9b3-3775-4a7b-d549-08d916b34427 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 May 2021 08:35:44.6554 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Gm9yK5JIZy4AUmbqdV0aMNEB6Xq4U/GgHOplFcorK7BMZuhvkCbp9pnNKZaNWEyYORL5tqTopI+EFbNnzBNL2A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSAPR01MB4963 Message-ID-Hash: U5R5XKTEPD3X5J67I7YTA3STFNT2NSC5 X-Message-ID-Hash: U5R5XKTEPD3X5J67I7YTA3STFNT2NSC5 X-MailFrom: ruansy.fnst@fujitsu.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation CC: "linux-kernel@vger.kernel.org" , "linux-xfs@vger.kernel.org" , "linux-nvdimm@lists.01.org" , "linux-fsdevel@vger.kernel.org" , "darrick.wong@oracle.com" , "willy@infradead.org" , "viro@zeniv.linux.org.uk" , "david@fromorbit.com" , "hch@lst.de" , "rgoldwyn@suse.de" , Goldwyn Rodrigues X-Mailman-Version: 3.1.1 Precedence: list List-Id: "Linux-nvdimm developer list." Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit > -----Original Message----- > From: Darrick J. Wong > Subject: Re: [PATCH v5 5/7] fsdax: Dedup file range to use a compare function > > On Tue, May 11, 2021 at 11:09:31AM +0800, Shiyang Ruan wrote: > > With dax we cannot deal with readpage() etc. So, we create a dax > > comparison funciton which is similar with > > vfs_dedupe_file_range_compare(). > > And introduce dax_remap_file_range_prep() for filesystem use. > > > > Signed-off-by: Goldwyn Rodrigues > > Signed-off-by: Shiyang Ruan > > --- > > fs/dax.c | 56 > +++++++++++++++++++++++++++++++++++++++++++ > > fs/remap_range.c | 57 > +++++++++++++++++++++++++++++++++++++------- > > fs/xfs/xfs_reflink.c | 8 +++++-- > > include/linux/dax.h | 4 ++++ > > include/linux/fs.h | 12 ++++++---- > > 5 files changed, 123 insertions(+), 14 deletions(-) > > > > diff --git a/fs/dax.c b/fs/dax.c > > index ee9d28a79bfb..dedf1be0155c 100644 > > --- a/fs/dax.c > > +++ b/fs/dax.c > > @@ -1853,3 +1853,59 @@ vm_fault_t dax_finish_sync_fault(struct vm_fault > *vmf, > > return dax_insert_pfn_mkwrite(vmf, pfn, order); } > > EXPORT_SYMBOL_GPL(dax_finish_sync_fault); > > + > > +static loff_t dax_range_compare_actor(struct inode *ino1, loff_t pos1, > > + struct inode *ino2, loff_t pos2, loff_t len, void *data, > > + struct iomap *smap, struct iomap *dmap) { > > + void *saddr, *daddr; > > + bool *same = data; > > + int ret; > > + > > + if (smap->type == IOMAP_HOLE && dmap->type == IOMAP_HOLE) { > > + *same = true; > > + return len; > > + } > > + > > + if (smap->type == IOMAP_HOLE || dmap->type == IOMAP_HOLE) { > > + *same = false; > > + return 0; > > + } > > + > > + ret = dax_iomap_direct_access(smap, pos1, ALIGN(pos1 + len, PAGE_SIZE), > > + &saddr, NULL); > > + if (ret < 0) > > + return -EIO; > > + > > + ret = dax_iomap_direct_access(dmap, pos2, ALIGN(pos2 + len, PAGE_SIZE), > > + &daddr, NULL); > > + if (ret < 0) > > + return -EIO; > > + > > + *same = !memcmp(saddr, daddr, len); > > + return len; > > +} > > + > > +int dax_dedupe_file_range_compare(struct inode *src, loff_t srcoff, > > + struct inode *dest, loff_t destoff, loff_t len, bool *is_same, > > + const struct iomap_ops *ops) > > +{ > > + int id, ret = 0; > > + > > + id = dax_read_lock(); > > + while (len) { > > + ret = iomap_apply2(src, srcoff, dest, destoff, len, 0, ops, > > + is_same, dax_range_compare_actor); > > + if (ret < 0 || !*is_same) > > + goto out; > > + > > + len -= ret; > > + srcoff += ret; > > + destoff += ret; > > + } > > + ret = 0; > > +out: > > + dax_read_unlock(id); > > + return ret; > > +} > > +EXPORT_SYMBOL_GPL(dax_dedupe_file_range_compare); > > diff --git a/fs/remap_range.c b/fs/remap_range.c index > > e4a5fdd7ad7b..7bc4c8e3aa9f 100644 > > --- a/fs/remap_range.c > > +++ b/fs/remap_range.c > > @@ -14,6 +14,7 @@ > > #include > > #include > > #include > > +#include > > #include "internal.h" > > > > #include > > @@ -199,9 +200,9 @@ static void vfs_unlock_two_pages(struct page *page1, > struct page *page2) > > * Compare extents of two files to see if they are the same. > > * Caller must have locked both inodes to prevent write races. > > */ > > -static int vfs_dedupe_file_range_compare(struct inode *src, loff_t srcoff, > > - struct inode *dest, loff_t destoff, > > - loff_t len, bool *is_same) > > +int vfs_dedupe_file_range_compare(struct inode *src, loff_t srcoff, > > + struct inode *dest, loff_t destoff, > > + loff_t len, bool *is_same) > > { > > loff_t src_poff; > > loff_t dest_poff; > > @@ -280,6 +281,7 @@ static int vfs_dedupe_file_range_compare(struct > > inode *src, loff_t srcoff, > > out_error: > > return error; > > } > > +EXPORT_SYMBOL(vfs_dedupe_file_range_compare); > > > > /* > > * Check that the two inodes are eligible for cloning, the ranges > > make @@ -289,9 +291,11 @@ static int > vfs_dedupe_file_range_compare(struct inode *src, loff_t srcoff, > > * If there's an error, then the usual negative error code is returned. > > * Otherwise returns 0 with *len set to the request length. > > */ > > -int generic_remap_file_range_prep(struct file *file_in, loff_t pos_in, > > - struct file *file_out, loff_t pos_out, > > - loff_t *len, unsigned int remap_flags) > > +static int > > +__generic_remap_file_range_prep(struct file *file_in, loff_t pos_in, > > + struct file *file_out, loff_t pos_out, > > + loff_t *len, unsigned int remap_flags, > > + const struct iomap_ops *dax_read_ops) > > { > > struct inode *inode_in = file_inode(file_in); > > struct inode *inode_out = file_inode(file_out); @@ -351,8 +355,17 @@ > > int generic_remap_file_range_prep(struct file *file_in, loff_t pos_in, > > if (remap_flags & REMAP_FILE_DEDUP) { > > bool is_same = false; > > > > - ret = vfs_dedupe_file_range_compare(inode_in, pos_in, > > - inode_out, pos_out, *len, &is_same); > > + if (!IS_DAX(inode_in)) > > + ret = vfs_dedupe_file_range_compare(inode_in, pos_in, > > + inode_out, pos_out, *len, &is_same); #ifdef > CONFIG_FS_DAX > > + else if (dax_read_ops) > > + ret = dax_dedupe_file_range_compare(inode_in, pos_in, > > + inode_out, pos_out, *len, &is_same, > > + dax_read_ops); > > +#endif /* CONFIG_FS_DAX */ > > Hmm, can you add an entry to the !IS_ENABLED(CONFIG_DAX) part of dax.h > that defines dax_dedupe_file_range_compare as a dummy function that returns > -EOPNOTSUPP? We try not to sprinkle preprocessor directives into the middle > of functions, per Linus rules. I found that it's ok to build without the #ifdef and #endif here, even though CONFIG_FS_DAX is disabled. And like other dax functions in fs/dax.c, such as dax_iomap_rw(), it is declared in include/linux/dax.h without IS_ENABLED() or #ifdef wrapped. And xfs calls it directly and it won't cause build error. So, I think I could just remove the #ifdef here, but I am not sure if this obeys the rule. > > > + else > > + return -EINVAL; > > if (ret) > > return ret; > > if (!is_same) > > @@ -370,6 +383,34 @@ int generic_remap_file_range_prep(struct file > > *file_in, loff_t pos_in, > > > > return ret; > > } > > + > > +#ifdef CONFIG_FS_DAX > > +int dax_remap_file_range_prep(struct file *file_in, loff_t pos_in, > > + struct file *file_out, loff_t pos_out, > > + loff_t *len, unsigned int remap_flags, > > + const struct iomap_ops *ops) { > > + return __generic_remap_file_range_prep(file_in, pos_in, file_out, > > + pos_out, len, remap_flags, ops); } #else int > > +dax_remap_file_range_prep(struct file *file_in, loff_t pos_in, > > + struct file *file_out, loff_t pos_out, > > + loff_t *len, unsigned int remap_flags, > > + const struct iomap_ops *ops) { > > + return -EOPNOTSUPP; > > +} > > +#endif /* CONFIG_FS_DAX */ > > +EXPORT_SYMBOL(dax_remap_file_range_prep); > > I think this symbol belongs in fs/dax.c and the declaration in dax.h? For the function name, it does should belong to fs/dax. But if so, __generic_remap_file_range_prep() needs to be called in fs/dax. I don't think this is good. -- Thanks, Ruan Shiyang. > > --D > > > +int generic_remap_file_range_prep(struct file *file_in, loff_t pos_in, > > + struct file *file_out, loff_t pos_out, > > + loff_t *len, unsigned int remap_flags) { > > + return __generic_remap_file_range_prep(file_in, pos_in, file_out, > > + pos_out, len, remap_flags, NULL); } > > EXPORT_SYMBOL(generic_remap_file_range_prep); > > > > loff_t do_clone_file_range(struct file *file_in, loff_t pos_in, diff > > --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index > > 060695d6d56a..d25434f93235 100644 > > --- a/fs/xfs/xfs_reflink.c > > +++ b/fs/xfs/xfs_reflink.c > > @@ -1329,8 +1329,12 @@ xfs_reflink_remap_prep( > > if (IS_DAX(inode_in) || IS_DAX(inode_out)) > > goto out_unlock; > > > > - ret = generic_remap_file_range_prep(file_in, pos_in, file_out, pos_out, > > - len, remap_flags); > > + if (!IS_DAX(inode_in)) > > + ret = generic_remap_file_range_prep(file_in, pos_in, file_out, > > + pos_out, len, remap_flags); > > + else > > + ret = dax_remap_file_range_prep(file_in, pos_in, file_out, > > + pos_out, len, remap_flags, &xfs_read_iomap_ops); > > if (ret || *len == 0) > > goto out_unlock; > > > > diff --git a/include/linux/dax.h b/include/linux/dax.h index > > 3275e01ed33d..32e1c34349f2 100644 > > --- a/include/linux/dax.h > > +++ b/include/linux/dax.h > > @@ -239,6 +239,10 @@ int dax_invalidate_mapping_entry_sync(struct > address_space *mapping, > > pgoff_t index); > > s64 dax_iomap_zero(loff_t pos, u64 length, struct iomap *iomap, > > struct iomap *srcmap); > > +int dax_dedupe_file_range_compare(struct inode *src, loff_t srcoff, > > + struct inode *dest, loff_t destoff, > > + loff_t len, bool *is_same, > > + const struct iomap_ops *ops); > > static inline bool dax_mapping(struct address_space *mapping) { > > return mapping->host && IS_DAX(mapping->host); diff --git > > a/include/linux/fs.h b/include/linux/fs.h index > > c3c88fdb9b2a..e2c348553d87 100644 > > --- a/include/linux/fs.h > > +++ b/include/linux/fs.h > > @@ -71,6 +71,7 @@ struct fsverity_operations; struct fs_context; > > struct fs_parameter_spec; struct fileattr; > > +struct iomap_ops; > > > > extern void __init inode_init(void); > > extern void __init inode_init_early(void); @@ -2126,10 +2127,13 @@ > > extern ssize_t vfs_copy_file_range(struct file *, loff_t , struct file > > *, extern ssize_t generic_copy_file_range(struct file *file_in, loff_t pos_in, > > struct file *file_out, loff_t pos_out, > > size_t len, unsigned int flags); -extern int > > generic_remap_file_range_prep(struct file *file_in, loff_t pos_in, > > - struct file *file_out, loff_t pos_out, > > - loff_t *count, > > - unsigned int remap_flags); > > +int generic_remap_file_range_prep(struct file *file_in, loff_t pos_in, > > + struct file *file_out, loff_t pos_out, > > + loff_t *count, unsigned int remap_flags); int > > +dax_remap_file_range_prep(struct file *file_in, loff_t pos_in, > > + struct file *file_out, loff_t pos_out, > > + loff_t *len, unsigned int remap_flags, > > + const struct iomap_ops *ops); > > extern loff_t do_clone_file_range(struct file *file_in, loff_t pos_in, > > struct file *file_out, loff_t pos_out, > > loff_t len, unsigned int remap_flags); > > -- > > 2.31.1 > > > > > > _______________________________________________ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-leave@lists.01.org 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 X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A252DC43460 for ; Fri, 14 May 2021 08:43:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7B5BA613D6 for ; Fri, 14 May 2021 08:43:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231678AbhENIoS (ORCPT ); Fri, 14 May 2021 04:44:18 -0400 Received: from esa11.fujitsucc.c3s2.iphmx.com ([216.71.156.121]:63311 "EHLO esa11.fujitsucc.c3s2.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231452AbhENIoN (ORCPT ); Fri, 14 May 2021 04:44:13 -0400 X-Greylist: delayed 429 seconds by postgrey-1.27 at vger.kernel.org; Fri, 14 May 2021 04:44:12 EDT IronPort-SDR: MXMO6ialDwCcnsCgsZW5zH2ZtdJqvk5igowgO1omu/MVHzdfUZz4xog0s7wt/2gOC2V4Abbxeh nap91H6pnOQhI0jsi3fd8NYHxG/bVCFNyf7pC1LwWw7Q+DICGgwW/7VGxgsfWN8jHAe3561WvQ ZBAXBI/OzN/JaKR8IOBE/lqGnJSPgzbE860wf2oIQ0FM6vIe8DZV5SbyHMFnqHGhOSxyaBKOGl QXNyri1uKFiGM0uNmUry7iarQ7G9i9iDVseqxgB90qofF4d+uwHQd7yDO4Lv8BcL+LUOPIIrKp eh4= X-IronPort-AV: E=McAfee;i="6200,9189,9983"; a="31440383" X-IronPort-AV: E=Sophos;i="5.82,299,1613401200"; d="scan'208";a="31440383" Received: from mail-os2jpn01lp2054.outbound.protection.outlook.com (HELO JPN01-OS2-obe.outbound.protection.outlook.com) ([104.47.92.54]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 May 2021 17:35:48 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YN5BVZc9GkT++JwAeLbRLjOhUfdz1N4nk6OmsGpIgMu8Gv2pTn0xVo+CmQJSK77+gHsTidkfi85KmzZgdASr3W8fKGAnyaDkKio+XqCaQ1WddHFVQCsvl478yBAf451Ejw30swDktw6Ulq5S/JbTh4vVxycwfpt+nb7ZkUmBRR/pS10lLJjbrrOk2PzMr6Legb2nTykw+leOvZPu+2xW67177P0+k4DvnrfmUE0YnpQ79Fbb74IeLCdeQUjBLJyPeGzSm3BLqpBHUKAFdyWiLUfZt7l29IcJT/IUUc0FhBxdRbWb0cVCvMV/vnCZob6UBQft1jTOtNYvv+aBAMwPsw== 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-SenderADCheck; bh=bQis9JXWTanLDkzD07MqWb13eQqYhbpqdNLmhTqhZzA=; b=eARHYzQ6tzQAq7DKqhl0UNUx67WT8We7Gw3NGU4TnQtwUQCoR6i3qqPh6EiSwDo5J+g+9CyxsZ0o4gMF38pyTbQR+sAweTGDUmv3qmHbL4iWjCIt4ahpm0TGIOApR6h3ND5/TUaawRI+C80h+RMbis714waLoCp/LAQRty0wEWbeUeeBvohoRjQgt9zQ6wPGT81uTwOgG62debYTL0DYkxJO/3oPoZg/mK+vE2nOpYgq/59ySpjxcQqkejPgXKs56ZwM03tywaqIdWeM18xdLHMVngiRuM5CZkkuX/xcdZ695O+qMcjdED+SsVJre9/LrufzxJbIus9Bx6ENWIlGMA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fujitsu.onmicrosoft.com; s=selector2-fujitsu-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bQis9JXWTanLDkzD07MqWb13eQqYhbpqdNLmhTqhZzA=; b=rQ3GgfVgq6v/+bkzXwjquV+eoMJ5v7v5hje7qttQCDNu4iW1M6yiJX+tXnvX6YafREA0KQJ+ofx2WPjFkvN44l3cj6J1OBW9BT8Q7roJ7whoSXA9zWuEG0FMYtkxQkFJmJUOcQ3Ze+F3/5O2F4yZjwHj7RPoX4XYzpDQ5VyQiT8= Received: from OSBPR01MB2920.jpnprd01.prod.outlook.com (2603:1096:604:18::16) by OSAPR01MB4963.jpnprd01.prod.outlook.com (2603:1096:604:37::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.28; Fri, 14 May 2021 08:35:44 +0000 Received: from OSBPR01MB2920.jpnprd01.prod.outlook.com ([fe80::b985:8239:6cf0:1228]) by OSBPR01MB2920.jpnprd01.prod.outlook.com ([fe80::b985:8239:6cf0:1228%7]) with mapi id 15.20.4108.032; Fri, 14 May 2021 08:35:44 +0000 From: "ruansy.fnst@fujitsu.com" To: "Darrick J. Wong" CC: "linux-kernel@vger.kernel.org" , "linux-xfs@vger.kernel.org" , "linux-nvdimm@lists.01.org" , "linux-fsdevel@vger.kernel.org" , "darrick.wong@oracle.com" , "dan.j.williams@intel.com" , "willy@infradead.org" , "viro@zeniv.linux.org.uk" , "david@fromorbit.com" , "hch@lst.de" , "rgoldwyn@suse.de" , Goldwyn Rodrigues Subject: RE: [PATCH v5 5/7] fsdax: Dedup file range to use a compare function Thread-Topic: [PATCH v5 5/7] fsdax: Dedup file range to use a compare function Thread-Index: AQHXRhM6cq5EsgJhOkif8HCLojlGfKrfDrUAgAOVHuA= Date: Fri, 14 May 2021 08:35:44 +0000 Message-ID: References: <20210511030933.3080921-1-ruansy.fnst@fujitsu.com> <20210511030933.3080921-6-ruansy.fnst@fujitsu.com> <20210512012336.GU8582@magnolia> In-Reply-To: <20210512012336.GU8582@magnolia> Accept-Language: en-US, zh-CN Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=fujitsu.com; x-originating-ip: [223.111.68.150] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c052c9b3-3775-4a7b-d549-08d916b34427 x-ms-traffictypediagnostic: OSAPR01MB4963: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: qrjU2DWtJowbvqrVEMw5BeGclPkd/eHdZQwjJhDZoijK+nf7n0+0oS4UbZt6uogoS+1yN9+n2blvbFU769ZdF1sFHNCvQZJ3cm7i9zZdY6EirZ/5jmUaMey70xtB0AfFy4MrgxJpETGkzXbj1Ssqeo8w4EabjpD6EIxo3PUVjwQO7Ys05ZHkRTSrZGv/c5ehdTtspPFOxYrWrmIgxymBNx3dR+dYyt2DWC8mzJmvT9YDwjCNZmI4qm1hjHcydzkBwTASFqYdPoirn8aFdMhLNqJB6qec8bsm8eT71+lu1FvM7urhOz616PkI/nHXN9+jG6qq3vo6gzbuIq8yCCcCS5DWT7jBIys9txIfv69BF1DDiR82PT9y3FGQuXM9DTSUwutIAHGC7E3Zl6jJOd2lONJK7Mrf7R3YaWy6slzq1wCNyQogVyIG1iFfZekBZiZnqQaJf+Uir5FxHdo4O9Ng3UZ6k0YqzsNlwC8n5OXvoeYc5QG5gxr1LFCMNYMONlGNaiW/hazMaRExh/w6AZVQFhfhOlMS1inARW74ZemAGwJ9mTIuXlqY3NgV4pvj83Xl1aUuY0eAFK6XGn+gvOzeZOVKFVU+FFN6l2/V209qP+0= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OSBPR01MB2920.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(39860400002)(346002)(366004)(376002)(396003)(9686003)(83380400001)(38100700002)(7416002)(55016002)(30864003)(6506007)(86362001)(122000001)(85182001)(52536014)(186003)(5660300002)(6916009)(33656002)(478600001)(26005)(66556008)(66476007)(8936002)(64756008)(7696005)(54906003)(2906002)(66946007)(76116006)(4326008)(71200400001)(316002)(8676002)(66446008);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?gb2312?B?LzR2b3RhdmxERmV2UkJGNmN0Ylc2dmN0Q1pJSHc4bFFPYXZoeWVMcUVzK0Ro?= =?gb2312?B?WEhXQm5jQkUrOHY0WktNRDlNejY3TnMyK05vM3I1djVCb01zSW5QRWRyeks5?= =?gb2312?B?Y29hYnZDa3k4SFNCOVQxL3dkTUpaSjJzbDkzUVl1b1puWDZqVnBDSDh5MEww?= =?gb2312?B?QVBqcHJWYnJMTXNzcUpQcnBkUGNrMDl6ZzhOMVJGL0dlWVZoclJ0NVJISUhP?= =?gb2312?B?SnJBM2RSNzNlSi9EV1M4YjZBemRpaktJTnd5ZTJ3bFMzODlJSmJRWEY5K253?= =?gb2312?B?UjdLVEdYUFEyT1Rqd2xHbHpXcHFSNUJPWXRHcE9PQ1dMTFlzdXorQU96c1FG?= =?gb2312?B?QjFMOEdRWFJsY3JzRnh4UUFJUUdNM3RvOTUxMmVUQ0dIV21JOE9qMGRHbXA1?= =?gb2312?B?azBMdHMyQlhnVzdSTWNuWTA2STVSWDBpOFlWZTlJOUNCa2pNZURMMnFVcWdo?= =?gb2312?B?ZzNvWVNnY1Y1L2RqeThnd1ZFTy9IWWV0elVHZnVtc0U0c1g4WHdDdERvY2xY?= =?gb2312?B?RnV0eDVqb2wvVTdjbmplZUF0L0ZaLzFqMi9HYVBuWVJwQWliMU5TMGlPa2pp?= =?gb2312?B?bGJubkg3NVNmdkNKenVQRXpIK3lvTmFlb3pzeDhQeTF6MUNNbFkxWmhSeHpC?= =?gb2312?B?SkJVVlppWFhTMGwxaklVSmNGaThqNGVNUWRrSjFhdVJjU3drSGwwWGRrVXVS?= =?gb2312?B?V1FLa0Yydy85SUsvZUxGa1ljNTJkcm94NlF1TTlDRGo1SFRYZkhsMHg4eUdQ?= =?gb2312?B?ZkF3VDVxRWQrbmh4eTk1OGlIZEZvVjlmTDJMeG8xeTFCT1N6ZWp3VS9kZVZz?= =?gb2312?B?b2JyZ2JhRnlic3Foa3lrdHJHT2FkT3FyTnF3bkUzazA4M2JvRm5pY2dpdVN1?= =?gb2312?B?cmZpelI5V0dmdGc3Q0t0QUFOak0xcmJ2MGJ5ZzFQMU95b2VCNDdkV1pUbkZ4?= =?gb2312?B?LzByN1ZZWWRoZG5FNGdsOWRzczJVZmdNK2tmdVRNUXg1RkdLZmZmanRlbnRN?= =?gb2312?B?bFpCRU83UmQwSCtZMWwvKzd0blQ1UGJNdnJ3ckJBaU5mWEtnN3BRa1poVXRy?= =?gb2312?B?b1FjU0YxTUhkWmdVVUx0TVA1Z1ZVUDhvNG1tRHBRd25vQ1pSaXZXTVhWMWNJ?= =?gb2312?B?WTdqWHJJNlFOQjVCYlFLK1RmQ25sNGFuZ1MzanEvZ25XazljTmRPVndXOEo4?= =?gb2312?B?WFI0dDFnNVpJWkFwMU0wS1JaVWdqOTdwVGh5TGpNczNyMlduSjFQcE1UamdG?= =?gb2312?B?NHMzWTlHdXNyb1RwaW05TXpLN085QWViK0NEby9FeHRReDA4TUt4cVVBbGds?= =?gb2312?B?TmFPWDdjMU5lakxQelFsYVBSL2ROVjR5Z1hlTVFNbSs4QmFuN0JhQTRjaVdQ?= =?gb2312?B?b0pTRElRcWRkRnFuUjhrT2VSVkhQV3VpM3VXZHFxUEl1UDc4dUxXV2oxdFFa?= =?gb2312?B?ZWFFdHl1WThyVUVEQlY1K1JZeDd5cXpFQ1dURlMwZmhicHhhR3F2d2J0UWk0?= =?gb2312?B?SFpRZzVyMEtoMllFV0Fpa2NnclRvdzlYcEFhYzJ1eVBZbENmZlVrNkpaL2dN?= =?gb2312?B?bCszaFlRQ25zd2JYY3crMWRKUU5PbmlkblRIc3pmN3RVblFMZ0UyVzhqem5L?= =?gb2312?B?SWlaSnhJVndTWkI0UXlHMThoTmxYQjFFUWM2NGNleVJTU1k5ZjR6ZlNidUl3?= =?gb2312?B?WmpwRlFndXk4WXNuOGJ2c0RIcHhoSHVsNHRXcjhEdnRNbStpMmhUWWJWdXVO?= =?gb2312?Q?9jJoqdm6tRA8r2lT4y1sCubYZwUHCuc3OfnQEib?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OSBPR01MB2920.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c052c9b3-3775-4a7b-d549-08d916b34427 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 May 2021 08:35:44.6554 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Gm9yK5JIZy4AUmbqdV0aMNEB6Xq4U/GgHOplFcorK7BMZuhvkCbp9pnNKZaNWEyYORL5tqTopI+EFbNnzBNL2A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSAPR01MB4963 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogRGFycmljayBKLiBXb25n IDxkandvbmdAa2VybmVsLm9yZz4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2NSA1LzddIGZzZGF4 OiBEZWR1cCBmaWxlIHJhbmdlIHRvIHVzZSBhIGNvbXBhcmUgZnVuY3Rpb24NCj4gDQo+IE9uIFR1 ZSwgTWF5IDExLCAyMDIxIGF0IDExOjA5OjMxQU0gKzA4MDAsIFNoaXlhbmcgUnVhbiB3cm90ZToN Cj4gPiBXaXRoIGRheCB3ZSBjYW5ub3QgZGVhbCB3aXRoIHJlYWRwYWdlKCkgZXRjLiBTbywgd2Ug Y3JlYXRlIGEgZGF4DQo+ID4gY29tcGFyaXNvbiBmdW5jaXRvbiB3aGljaCBpcyBzaW1pbGFyIHdp dGgNCj4gPiB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VfY29tcGFyZSgpLg0KPiA+IEFuZCBpbnRyb2R1 Y2UgZGF4X3JlbWFwX2ZpbGVfcmFuZ2VfcHJlcCgpIGZvciBmaWxlc3lzdGVtIHVzZS4NCj4gPg0K PiA+IFNpZ25lZC1vZmYtYnk6IEdvbGR3eW4gUm9kcmlndWVzIDxyZ29sZHd5bkBzdXNlLmNvbT4N Cj4gPiBTaWduZWQtb2ZmLWJ5OiBTaGl5YW5nIFJ1YW4gPHJ1YW5zeS5mbnN0QGZ1aml0c3UuY29t Pg0KPiA+IC0tLQ0KPiA+ICBmcy9kYXguYyAgICAgICAgICAgICB8IDU2DQo+ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgZnMvcmVtYXBfcmFuZ2UuYyAg ICAgfCA1Nw0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQ0K PiA+ICBmcy94ZnMveGZzX3JlZmxpbmsuYyB8ICA4ICsrKysrLS0NCj4gPiAgaW5jbHVkZS9saW51 eC9kYXguaCAgfCAgNCArKysrDQo+ID4gIGluY2x1ZGUvbGludXgvZnMuaCAgIHwgMTIgKysrKysr LS0tLQ0KPiA+ICA1IGZpbGVzIGNoYW5nZWQsIDEyMyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlv bnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9mcy9kYXguYyBiL2ZzL2RheC5jDQo+ID4gaW5k ZXggZWU5ZDI4YTc5YmZiLi5kZWRmMWJlMDE1NWMgMTAwNjQ0DQo+ID4gLS0tIGEvZnMvZGF4LmMN Cj4gPiArKysgYi9mcy9kYXguYw0KPiA+IEBAIC0xODUzLDMgKzE4NTMsNTkgQEAgdm1fZmF1bHRf dCBkYXhfZmluaXNoX3N5bmNfZmF1bHQoc3RydWN0IHZtX2ZhdWx0DQo+ICp2bWYsDQo+ID4gIAly ZXR1cm4gZGF4X2luc2VydF9wZm5fbWt3cml0ZSh2bWYsIHBmbiwgb3JkZXIpOyAgfQ0KPiA+IEVY UE9SVF9TWU1CT0xfR1BMKGRheF9maW5pc2hfc3luY19mYXVsdCk7DQo+ID4gKw0KPiA+ICtzdGF0 aWMgbG9mZl90IGRheF9yYW5nZV9jb21wYXJlX2FjdG9yKHN0cnVjdCBpbm9kZSAqaW5vMSwgbG9m Zl90IHBvczEsDQo+ID4gKwkJc3RydWN0IGlub2RlICppbm8yLCBsb2ZmX3QgcG9zMiwgbG9mZl90 IGxlbiwgdm9pZCAqZGF0YSwNCj4gPiArCQlzdHJ1Y3QgaW9tYXAgKnNtYXAsIHN0cnVjdCBpb21h cCAqZG1hcCkgew0KPiA+ICsJdm9pZCAqc2FkZHIsICpkYWRkcjsNCj4gPiArCWJvb2wgKnNhbWUg PSBkYXRhOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlpZiAoc21hcC0+dHlwZSA9PSBJ T01BUF9IT0xFICYmIGRtYXAtPnR5cGUgPT0gSU9NQVBfSE9MRSkgew0KPiA+ICsJCSpzYW1lID0g dHJ1ZTsNCj4gPiArCQlyZXR1cm4gbGVuOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChzbWFw LT50eXBlID09IElPTUFQX0hPTEUgfHwgZG1hcC0+dHlwZSA9PSBJT01BUF9IT0xFKSB7DQo+ID4g KwkJKnNhbWUgPSBmYWxzZTsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwlyZXQgPSBkYXhfaW9tYXBfZGlyZWN0X2FjY2VzcyhzbWFwLCBwb3MxLCBBTElHTihwb3MxICsg bGVuLCBQQUdFX1NJWkUpLA0KPiA+ICsJCQkJICAgICAgJnNhZGRyLCBOVUxMKTsNCj4gPiArCWlm IChyZXQgPCAwKQ0KPiA+ICsJCXJldHVybiAtRUlPOw0KPiA+ICsNCj4gPiArCXJldCA9IGRheF9p b21hcF9kaXJlY3RfYWNjZXNzKGRtYXAsIHBvczIsIEFMSUdOKHBvczIgKyBsZW4sIFBBR0VfU0la RSksDQo+ID4gKwkJCQkgICAgICAmZGFkZHIsIE5VTEwpOw0KPiA+ICsJaWYgKHJldCA8IDApDQo+ ID4gKwkJcmV0dXJuIC1FSU87DQo+ID4gKw0KPiA+ICsJKnNhbWUgPSAhbWVtY21wKHNhZGRyLCBk YWRkciwgbGVuKTsNCj4gPiArCXJldHVybiBsZW47DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBk YXhfZGVkdXBlX2ZpbGVfcmFuZ2VfY29tcGFyZShzdHJ1Y3QgaW5vZGUgKnNyYywgbG9mZl90IHNy Y29mZiwNCj4gPiArCQlzdHJ1Y3QgaW5vZGUgKmRlc3QsIGxvZmZfdCBkZXN0b2ZmLCBsb2ZmX3Qg bGVuLCBib29sICppc19zYW1lLA0KPiA+ICsJCWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcykN Cj4gPiArew0KPiA+ICsJaW50IGlkLCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCWlkID0gZGF4X3Jl YWRfbG9jaygpOw0KPiA+ICsJd2hpbGUgKGxlbikgew0KPiA+ICsJCXJldCA9IGlvbWFwX2FwcGx5 MihzcmMsIHNyY29mZiwgZGVzdCwgZGVzdG9mZiwgbGVuLCAwLCBvcHMsDQo+ID4gKwkJCQkgICBp c19zYW1lLCBkYXhfcmFuZ2VfY29tcGFyZV9hY3Rvcik7DQo+ID4gKwkJaWYgKHJldCA8IDAgfHwg ISppc19zYW1lKQ0KPiA+ICsJCQlnb3RvIG91dDsNCj4gPiArDQo+ID4gKwkJbGVuIC09IHJldDsN Cj4gPiArCQlzcmNvZmYgKz0gcmV0Ow0KPiA+ICsJCWRlc3RvZmYgKz0gcmV0Ow0KPiA+ICsJfQ0K PiA+ICsJcmV0ID0gMDsNCj4gPiArb3V0Og0KPiA+ICsJZGF4X3JlYWRfdW5sb2NrKGlkKTsNCj4g PiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArRVhQT1JUX1NZTUJPTF9HUEwoZGF4X2RlZHVw ZV9maWxlX3JhbmdlX2NvbXBhcmUpOw0KPiA+IGRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5j IGIvZnMvcmVtYXBfcmFuZ2UuYyBpbmRleA0KPiA+IGU0YTVmZGQ3YWQ3Yi4uN2JjNGM4ZTNhYTlm IDEwMDY0NA0KPiA+IC0tLSBhL2ZzL3JlbWFwX3JhbmdlLmMNCj4gPiArKysgYi9mcy9yZW1hcF9y YW5nZS5jDQo+ID4gQEAgLTE0LDYgKzE0LDcgQEANCj4gPiAgI2luY2x1ZGUgPGxpbnV4L2NvbXBh dC5oPg0KPiA+ICAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4NCj4gPiAgI2luY2x1ZGUgPGxpbnV4 L2ZzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kYXguaD4NCj4gPiAgI2luY2x1ZGUgImludGVy bmFsLmgiDQo+ID4NCj4gPiAgI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4NCj4gPiBAQCAtMTk5 LDkgKzIwMCw5IEBAIHN0YXRpYyB2b2lkIHZmc191bmxvY2tfdHdvX3BhZ2VzKHN0cnVjdCBwYWdl ICpwYWdlMSwNCj4gc3RydWN0IHBhZ2UgKnBhZ2UyKQ0KPiA+ICAgKiBDb21wYXJlIGV4dGVudHMg b2YgdHdvIGZpbGVzIHRvIHNlZSBpZiB0aGV5IGFyZSB0aGUgc2FtZS4NCj4gPiAgICogQ2FsbGVy IG11c3QgaGF2ZSBsb2NrZWQgYm90aCBpbm9kZXMgdG8gcHJldmVudCB3cml0ZSByYWNlcy4NCj4g PiAgICovDQo+ID4gLXN0YXRpYyBpbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlX2NvbXBhcmUoc3Ry dWN0IGlub2RlICpzcmMsIGxvZmZfdCBzcmNvZmYsDQo+ID4gLQkJCQkJIHN0cnVjdCBpbm9kZSAq ZGVzdCwgbG9mZl90IGRlc3RvZmYsDQo+ID4gLQkJCQkJIGxvZmZfdCBsZW4sIGJvb2wgKmlzX3Nh bWUpDQo+ID4gK2ludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VfY29tcGFyZShzdHJ1Y3QgaW5vZGUg KnNyYywgbG9mZl90IHNyY29mZiwNCj4gPiArCQkJCSAgc3RydWN0IGlub2RlICpkZXN0LCBsb2Zm X3QgZGVzdG9mZiwNCj4gPiArCQkJCSAgbG9mZl90IGxlbiwgYm9vbCAqaXNfc2FtZSkNCj4gPiAg ew0KPiA+ICAJbG9mZl90IHNyY19wb2ZmOw0KPiA+ICAJbG9mZl90IGRlc3RfcG9mZjsNCj4gPiBA QCAtMjgwLDYgKzI4MSw3IEBAIHN0YXRpYyBpbnQgdmZzX2RlZHVwZV9maWxlX3JhbmdlX2NvbXBh cmUoc3RydWN0DQo+ID4gaW5vZGUgKnNyYywgbG9mZl90IHNyY29mZiwNCj4gPiAgb3V0X2Vycm9y Og0KPiA+ICAJcmV0dXJuIGVycm9yOw0KPiA+ICB9DQo+ID4gK0VYUE9SVF9TWU1CT0wodmZzX2Rl ZHVwZV9maWxlX3JhbmdlX2NvbXBhcmUpOw0KPiA+DQo+ID4gIC8qDQo+ID4gICAqIENoZWNrIHRo YXQgdGhlIHR3byBpbm9kZXMgYXJlIGVsaWdpYmxlIGZvciBjbG9uaW5nLCB0aGUgcmFuZ2VzDQo+ ID4gbWFrZSBAQCAtMjg5LDkgKzI5MSwxMSBAQCBzdGF0aWMgaW50DQo+IHZmc19kZWR1cGVfZmls ZV9yYW5nZV9jb21wYXJlKHN0cnVjdCBpbm9kZSAqc3JjLCBsb2ZmX3Qgc3Jjb2ZmLA0KPiA+ICAg KiBJZiB0aGVyZSdzIGFuIGVycm9yLCB0aGVuIHRoZSB1c3VhbCBuZWdhdGl2ZSBlcnJvciBjb2Rl IGlzIHJldHVybmVkLg0KPiA+ICAgKiBPdGhlcndpc2UgcmV0dXJucyAwIHdpdGggKmxlbiBzZXQg dG8gdGhlIHJlcXVlc3QgbGVuZ3RoLg0KPiA+ICAgKi8NCj4gPiAtaW50IGdlbmVyaWNfcmVtYXBf ZmlsZV9yYW5nZV9wcmVwKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLA0KPiA+ IC0JCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZV9vdXQsIGxvZmZfdCBwb3Nfb3V0LA0KPiA+IC0JCQkJ ICBsb2ZmX3QgKmxlbiwgdW5zaWduZWQgaW50IHJlbWFwX2ZsYWdzKQ0KPiA+ICtzdGF0aWMgaW50 DQo+ID4gK19fZ2VuZXJpY19yZW1hcF9maWxlX3JhbmdlX3ByZXAoc3RydWN0IGZpbGUgKmZpbGVf aW4sIGxvZmZfdCBwb3NfaW4sDQo+ID4gKwkJCQlzdHJ1Y3QgZmlsZSAqZmlsZV9vdXQsIGxvZmZf dCBwb3Nfb3V0LA0KPiA+ICsJCQkJbG9mZl90ICpsZW4sIHVuc2lnbmVkIGludCByZW1hcF9mbGFn cywNCj4gPiArCQkJCWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKmRheF9yZWFkX29wcykNCj4gPiAg ew0KPiA+ICAJc3RydWN0IGlub2RlICppbm9kZV9pbiA9IGZpbGVfaW5vZGUoZmlsZV9pbik7DQo+ ID4gIAlzdHJ1Y3QgaW5vZGUgKmlub2RlX291dCA9IGZpbGVfaW5vZGUoZmlsZV9vdXQpOyBAQCAt MzUxLDggKzM1NSwxNyBAQA0KPiA+IGludCBnZW5lcmljX3JlbWFwX2ZpbGVfcmFuZ2VfcHJlcChz dHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbiwNCj4gPiAgCWlmIChyZW1hcF9mbGFn cyAmIFJFTUFQX0ZJTEVfREVEVVApIHsNCj4gPiAgCQlib29sCQlpc19zYW1lID0gZmFsc2U7DQo+ ID4NCj4gPiAtCQlyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2VfY29tcGFyZShpbm9kZV9pbiwg cG9zX2luLA0KPiA+IC0JCQkJaW5vZGVfb3V0LCBwb3Nfb3V0LCAqbGVuLCAmaXNfc2FtZSk7DQo+ ID4gKwkJaWYgKCFJU19EQVgoaW5vZGVfaW4pKQ0KPiA+ICsJCQlyZXQgPSB2ZnNfZGVkdXBlX2Zp bGVfcmFuZ2VfY29tcGFyZShpbm9kZV9pbiwgcG9zX2luLA0KPiA+ICsJCQkJCWlub2RlX291dCwg cG9zX291dCwgKmxlbiwgJmlzX3NhbWUpOyAjaWZkZWYNCj4gQ09ORklHX0ZTX0RBWA0KPiA+ICsJ CWVsc2UgaWYgKGRheF9yZWFkX29wcykNCj4gPiArCQkJcmV0ID0gZGF4X2RlZHVwZV9maWxlX3Jh bmdlX2NvbXBhcmUoaW5vZGVfaW4sIHBvc19pbiwNCj4gPiArCQkJCQlpbm9kZV9vdXQsIHBvc19v dXQsICpsZW4sICZpc19zYW1lLA0KPiA+ICsJCQkJCWRheF9yZWFkX29wcyk7DQo+ID4gKyNlbmRp ZiAvKiBDT05GSUdfRlNfREFYICovDQo+IA0KPiBIbW0sIGNhbiB5b3UgYWRkIGFuIGVudHJ5IHRv IHRoZSAhSVNfRU5BQkxFRChDT05GSUdfREFYKSBwYXJ0IG9mIGRheC5oDQo+IHRoYXQgZGVmaW5l cyBkYXhfZGVkdXBlX2ZpbGVfcmFuZ2VfY29tcGFyZSBhcyBhIGR1bW15IGZ1bmN0aW9uIHRoYXQg cmV0dXJucw0KPiAtRU9QTk9UU1VQUD8gIFdlIHRyeSBub3QgdG8gc3ByaW5rbGUgcHJlcHJvY2Vz c29yIGRpcmVjdGl2ZXMgaW50byB0aGUgbWlkZGxlDQo+IG9mIGZ1bmN0aW9ucywgcGVyIExpbnVz IHJ1bGVzLg0KDQpJIGZvdW5kIHRoYXQgaXQncyBvayB0byBidWlsZCB3aXRob3V0IHRoZSAjaWZk ZWYgYW5kICNlbmRpZiBoZXJlLCBldmVuIHRob3VnaCBDT05GSUdfRlNfREFYIGlzIGRpc2FibGVk Lg0KQW5kIGxpa2Ugb3RoZXIgZGF4IGZ1bmN0aW9ucyBpbiBmcy9kYXguYywgc3VjaCBhcyBkYXhf aW9tYXBfcncoKSwgaXQgaXMgZGVjbGFyZWQgaW4gaW5jbHVkZS9saW51eC9kYXguaCB3aXRob3V0 IElTX0VOQUJMRUQoKSBvciAjaWZkZWYgd3JhcHBlZC4gIEFuZCB4ZnMgY2FsbHMgaXQgZGlyZWN0 bHkgYW5kIGl0IHdvbid0IGNhdXNlIGJ1aWxkIGVycm9yLiAgU28sIEkgdGhpbmsgSSBjb3VsZCBq dXN0IHJlbW92ZSB0aGUgI2lmZGVmIGhlcmUsIGJ1dCBJIGFtIG5vdCBzdXJlIGlmIHRoaXMgb2Jl eXMgdGhlIHJ1bGUuDQoNCj4gDQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsN Cj4gPiAgCQlpZiAocmV0KQ0KPiA+ICAJCQlyZXR1cm4gcmV0Ow0KPiA+ICAJCWlmICghaXNfc2Ft ZSkNCj4gPiBAQCAtMzcwLDYgKzM4MywzNCBAQCBpbnQgZ2VuZXJpY19yZW1hcF9maWxlX3Jhbmdl X3ByZXAoc3RydWN0IGZpbGUNCj4gPiAqZmlsZV9pbiwgbG9mZl90IHBvc19pbiwNCj4gPg0KPiA+ ICAJcmV0dXJuIHJldDsNCj4gPiAgfQ0KPiA+ICsNCj4gPiArI2lmZGVmIENPTkZJR19GU19EQVgN Cj4gPiAraW50IGRheF9yZW1hcF9maWxlX3JhbmdlX3ByZXAoc3RydWN0IGZpbGUgKmZpbGVfaW4s IGxvZmZfdCBwb3NfaW4sDQo+ID4gKwkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlX291dCwgbG9m Zl90IHBvc19vdXQsDQo+ID4gKwkJCSAgICAgIGxvZmZfdCAqbGVuLCB1bnNpZ25lZCBpbnQgcmVt YXBfZmxhZ3MsDQo+ID4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcykgew0K PiA+ICsJcmV0dXJuIF9fZ2VuZXJpY19yZW1hcF9maWxlX3JhbmdlX3ByZXAoZmlsZV9pbiwgcG9z X2luLCBmaWxlX291dCwNCj4gPiArCQkJCQkgICAgICAgcG9zX291dCwgbGVuLCByZW1hcF9mbGFn cywgb3BzKTsgfSAjZWxzZSBpbnQNCj4gPiArZGF4X3JlbWFwX2ZpbGVfcmFuZ2VfcHJlcChzdHJ1 Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbiwNCj4gPiArCQkJICAgICAgc3RydWN0IGZp bGUgKmZpbGVfb3V0LCBsb2ZmX3QgcG9zX291dCwNCj4gPiArCQkJICAgICAgbG9mZl90ICpsZW4s IHVuc2lnbmVkIGludCByZW1hcF9mbGFncywNCj4gPiArCQkJICAgICAgY29uc3Qgc3RydWN0IGlv bWFwX29wcyAqb3BzKSB7DQo+ID4gKwlyZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gK30NCj4gPiAr I2VuZGlmIC8qIENPTkZJR19GU19EQVggKi8NCj4gPiArRVhQT1JUX1NZTUJPTChkYXhfcmVtYXBf ZmlsZV9yYW5nZV9wcmVwKTsNCj4gDQo+IEkgdGhpbmsgdGhpcyBzeW1ib2wgYmVsb25ncyBpbiBm cy9kYXguYyBhbmQgdGhlIGRlY2xhcmF0aW9uIGluIGRheC5oPw0KDQpGb3IgdGhlIGZ1bmN0aW9u IG5hbWUsIGl0IGRvZXMgc2hvdWxkIGJlbG9uZyB0byBmcy9kYXguICBCdXQgaWYgc28sIF9fZ2Vu ZXJpY19yZW1hcF9maWxlX3JhbmdlX3ByZXAoKSBuZWVkcyB0byBiZSBjYWxsZWQgaW4gZnMvZGF4 LiAgSSBkb24ndCB0aGluayB0aGlzIGlzIGdvb2QuDQoNCg0KLS0NClRoYW5rcywNClJ1YW4gU2hp eWFuZy4NCg0KPiANCj4gLS1EDQo+IA0KPiA+ICtpbnQgZ2VuZXJpY19yZW1hcF9maWxlX3Jhbmdl X3ByZXAoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sDQo+ID4gKwkJCQkgIHN0 cnVjdCBmaWxlICpmaWxlX291dCwgbG9mZl90IHBvc19vdXQsDQo+ID4gKwkJCQkgIGxvZmZfdCAq bGVuLCB1bnNpZ25lZCBpbnQgcmVtYXBfZmxhZ3MpIHsNCj4gPiArCXJldHVybiBfX2dlbmVyaWNf cmVtYXBfZmlsZV9yYW5nZV9wcmVwKGZpbGVfaW4sIHBvc19pbiwgZmlsZV9vdXQsDQo+ID4gKwkJ CQkJICAgICAgIHBvc19vdXQsIGxlbiwgcmVtYXBfZmxhZ3MsIE5VTEwpOyB9DQo+ID4gIEVYUE9S VF9TWU1CT0woZ2VuZXJpY19yZW1hcF9maWxlX3JhbmdlX3ByZXApOw0KPiA+DQo+ID4gIGxvZmZf dCBkb19jbG9uZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2lu LCBkaWZmDQo+ID4gLS1naXQgYS9mcy94ZnMveGZzX3JlZmxpbmsuYyBiL2ZzL3hmcy94ZnNfcmVm bGluay5jIGluZGV4DQo+ID4gMDYwNjk1ZDZkNTZhLi5kMjU0MzRmOTMyMzUgMTAwNjQ0DQo+ID4g LS0tIGEvZnMveGZzL3hmc19yZWZsaW5rLmMNCj4gPiArKysgYi9mcy94ZnMveGZzX3JlZmxpbmsu Yw0KPiA+IEBAIC0xMzI5LDggKzEzMjksMTIgQEAgeGZzX3JlZmxpbmtfcmVtYXBfcHJlcCgNCj4g PiAgCWlmIChJU19EQVgoaW5vZGVfaW4pIHx8IElTX0RBWChpbm9kZV9vdXQpKQ0KPiA+ICAJCWdv dG8gb3V0X3VubG9jazsNCj4gPg0KPiA+IC0JcmV0ID0gZ2VuZXJpY19yZW1hcF9maWxlX3Jhbmdl X3ByZXAoZmlsZV9pbiwgcG9zX2luLCBmaWxlX291dCwgcG9zX291dCwNCj4gPiAtCQkJbGVuLCBy ZW1hcF9mbGFncyk7DQo+ID4gKwlpZiAoIUlTX0RBWChpbm9kZV9pbikpDQo+ID4gKwkJcmV0ID0g Z2VuZXJpY19yZW1hcF9maWxlX3JhbmdlX3ByZXAoZmlsZV9pbiwgcG9zX2luLCBmaWxlX291dCwN Cj4gPiArCQkJCXBvc19vdXQsIGxlbiwgcmVtYXBfZmxhZ3MpOw0KPiA+ICsJZWxzZQ0KPiA+ICsJ CXJldCA9IGRheF9yZW1hcF9maWxlX3JhbmdlX3ByZXAoZmlsZV9pbiwgcG9zX2luLCBmaWxlX291 dCwNCj4gPiArCQkJCXBvc19vdXQsIGxlbiwgcmVtYXBfZmxhZ3MsICZ4ZnNfcmVhZF9pb21hcF9v cHMpOw0KPiA+ICAJaWYgKHJldCB8fCAqbGVuID09IDApDQo+ID4gIAkJZ290byBvdXRfdW5sb2Nr Ow0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGF4LmggYi9pbmNsdWRlL2xp bnV4L2RheC5oIGluZGV4DQo+ID4gMzI3NWUwMWVkMzNkLi4zMmUxYzM0MzQ5ZjIgMTAwNjQ0DQo+ ID4gLS0tIGEvaW5jbHVkZS9saW51eC9kYXguaA0KPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvZGF4 LmgNCj4gPiBAQCAtMjM5LDYgKzIzOSwxMCBAQCBpbnQgZGF4X2ludmFsaWRhdGVfbWFwcGluZ19l bnRyeV9zeW5jKHN0cnVjdA0KPiBhZGRyZXNzX3NwYWNlICptYXBwaW5nLA0KPiA+ICAJCQkJICAg ICAgcGdvZmZfdCBpbmRleCk7DQo+ID4gIHM2NCBkYXhfaW9tYXBfemVybyhsb2ZmX3QgcG9zLCB1 NjQgbGVuZ3RoLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLA0KPiA+ICAJCXN0cnVjdCBpb21hcCAqc3Jj bWFwKTsNCj4gPiAraW50IGRheF9kZWR1cGVfZmlsZV9yYW5nZV9jb21wYXJlKHN0cnVjdCBpbm9k ZSAqc3JjLCBsb2ZmX3Qgc3Jjb2ZmLA0KPiA+ICsJCQkJICBzdHJ1Y3QgaW5vZGUgKmRlc3QsIGxv ZmZfdCBkZXN0b2ZmLA0KPiA+ICsJCQkJICBsb2ZmX3QgbGVuLCBib29sICppc19zYW1lLA0KPiA+ ICsJCQkJICBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMpOw0KPiA+ICBzdGF0aWMgaW5saW5l IGJvb2wgZGF4X21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpICB7DQo+ID4g IAlyZXR1cm4gbWFwcGluZy0+aG9zdCAmJiBJU19EQVgobWFwcGluZy0+aG9zdCk7IGRpZmYgLS1n aXQNCj4gPiBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaCBpbmRleA0K PiA+IGMzYzg4ZmRiOWIyYS4uZTJjMzQ4NTUzZDg3IDEwMDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUv bGludXgvZnMuaA0KPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvZnMuaA0KPiA+IEBAIC03MSw2ICs3 MSw3IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zOyAgc3RydWN0IGZzX2NvbnRleHQ7DQo+ ID4gc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjOyAgc3RydWN0IGZpbGVhdHRyOw0KPiA+ICtzdHJ1 Y3QgaW9tYXBfb3BzOw0KPiA+DQo+ID4gIGV4dGVybiB2b2lkIF9faW5pdCBpbm9kZV9pbml0KHZv aWQpOw0KPiA+ICBleHRlcm4gdm9pZCBfX2luaXQgaW5vZGVfaW5pdF9lYXJseSh2b2lkKTsgQEAg LTIxMjYsMTAgKzIxMjcsMTMgQEANCj4gPiBleHRlcm4gc3NpemVfdCB2ZnNfY29weV9maWxlX3Jh bmdlKHN0cnVjdCBmaWxlICosIGxvZmZfdCAsIHN0cnVjdCBmaWxlDQo+ID4gKiwgIGV4dGVybiBz c2l6ZV90IGdlbmVyaWNfY29weV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2Zm X3QgcG9zX2luLA0KPiA+ICAJCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlX291dCwgbG9mZl90 IHBvc19vdXQsDQo+ID4gIAkJCQkgICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdz KTsgLWV4dGVybiBpbnQNCj4gPiBnZW5lcmljX3JlbWFwX2ZpbGVfcmFuZ2VfcHJlcChzdHJ1Y3Qg ZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbiwNCj4gPiAtCQkJCQkgc3RydWN0IGZpbGUgKmZp bGVfb3V0LCBsb2ZmX3QgcG9zX291dCwNCj4gPiAtCQkJCQkgbG9mZl90ICpjb3VudCwNCj4gPiAt CQkJCQkgdW5zaWduZWQgaW50IHJlbWFwX2ZsYWdzKTsNCj4gPiAraW50IGdlbmVyaWNfcmVtYXBf ZmlsZV9yYW5nZV9wcmVwKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLA0KPiA+ ICsJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZV9vdXQsIGxvZmZfdCBwb3Nfb3V0LA0KPiA+ICsJCQkJ ICBsb2ZmX3QgKmNvdW50LCB1bnNpZ25lZCBpbnQgcmVtYXBfZmxhZ3MpOyBpbnQNCj4gPiArZGF4 X3JlbWFwX2ZpbGVfcmFuZ2VfcHJlcChzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19p biwNCj4gPiArCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVfb3V0LCBsb2ZmX3QgcG9zX291dCwN Cj4gPiArCQkJICAgICAgbG9mZl90ICpsZW4sIHVuc2lnbmVkIGludCByZW1hcF9mbGFncywNCj4g PiArCQkJICAgICAgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzKTsNCj4gPiAgZXh0ZXJuIGxv ZmZfdCBkb19jbG9uZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9z X2luLA0KPiA+ICAJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZV9vdXQsIGxvZmZfdCBwb3Nfb3V0LA0K PiA+ICAJCQkJICBsb2ZmX3QgbGVuLCB1bnNpZ25lZCBpbnQgcmVtYXBfZmxhZ3MpOw0KPiA+IC0t DQo+ID4gMi4zMS4xDQo+ID4NCj4gPg0KPiA+DQo=