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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D773DC77B6C for ; Fri, 31 Mar 2023 00:30:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229647AbjCaAaq (ORCPT ); Thu, 30 Mar 2023 20:30:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229646AbjCaAao (ORCPT ); Thu, 30 Mar 2023 20:30:44 -0400 Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [IPv6:2a00:1450:4864:20::532]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 269971025B for ; Thu, 30 Mar 2023 17:30:35 -0700 (PDT) Received: by mail-ed1-x532.google.com with SMTP id ek18so83485536edb.6 for ; Thu, 30 Mar 2023 17:30:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1680222633; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=s3r5eQncDU04l860YNWqLD6wbbCGIfGDlp9mbjOhdOU=; b=dQ93Wk+Ks0MpqcGc+XVhyiMMrBUMuOTlnyUdvZTqVp0bN0Nmlc332OAwEYAAl4bdOb rMvMFpmV/ShWfjSwJCQQlIG8eLhnJAG6GIFRRac4zR3uNqv31lS4gB+893Ba8gr7luBu NYPe2fAf2Jbhe561F22ak4DIq2XkXoPQMnFZA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680222633; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=s3r5eQncDU04l860YNWqLD6wbbCGIfGDlp9mbjOhdOU=; b=P6euncxgN6ytprP3+mtxdCiYUaqeZm3kiuzBp84S4DAyxgOVz01qCm4J5XeU4qYbAZ 07u17cF+4frYpG6dtM9dzCZBoB/sanzPQh6TePetXom+Ydaq4zelLV2jVFMQRCRq1Cf8 hWndyZt5XA3XeJZuhaYgoF5uJ3LXKEPLgQ3E1gain2X+qvDVLX48iOt6ENSGGFIj6aWk 6V05X+mkax3x319/OvpTaRdlu9umbxYFLxH2q1LwjTK8oTLzFa9qtxHp089qzng/CI3n TcHM6wYpKRG7AIbCDWyOA28C5tfyXDRWQzvKi1AP9QJpcQSk7CeGvIE5vzOAV8AaJPMk bCQg== X-Gm-Message-State: AAQBX9dkSbw6lTd4tPYIOFeQrGG1n9R7neUOc+sw1n1e3gyiT0mJ1tar 6CL949U41YpSH847eSlkOUpnGSsN/wnY5/p2iB4nCw== X-Google-Smtp-Source: AKy350bUrFjid7TXbTeqMBKOpuNLpzymdFUzXKXUsWM99Dh5ebCTsP5lJJEB9dpSdwE6OtCHBeIdQ5BHXLCCKNvPA98= X-Received: by 2002:a17:907:d687:b0:93d:a14f:c9b4 with SMTP id wf7-20020a170907d68700b0093da14fc9b4mr12727665ejc.2.1680222633437; Thu, 30 Mar 2023 17:30:33 -0700 (PDT) MIME-Version: 1.0 References: <20221229081252.452240-1-sarthakkukreti@chromium.org> <20221229081252.452240-3-sarthakkukreti@chromium.org> In-Reply-To: From: Sarthak Kukreti Date: Thu, 30 Mar 2023 17:30:22 -0700 Message-ID: Subject: Re: [PATCH v2 2/7] dm: Add support for block provisioning To: Brian Foster Cc: sarthakkukreti@google.com, dm-devel@redhat.com, linux-block@vger.kernel.org, linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Jens Axboe , "Michael S. Tsirkin" , Jason Wang , Stefan Hajnoczi , Alasdair Kergon , Mike Snitzer , Christoph Hellwig , "Theodore Ts'o" , Andreas Dilger , Bart Van Assche , Daniil Lunev , "Darrick J. Wong" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org On Thu, Jan 5, 2023 at 6:42=E2=80=AFAM Brian Foster wr= ote: > > On Thu, Dec 29, 2022 at 12:12:47AM -0800, Sarthak Kukreti wrote: > > Add support to dm devices for REQ_OP_PROVISION. The default mode > > is to pass through the request and dm-thin will utilize it to provision > > blocks. > > > > Signed-off-by: Sarthak Kukreti > > --- > > drivers/md/dm-crypt.c | 4 +- > > drivers/md/dm-linear.c | 1 + > > drivers/md/dm-snap.c | 7 +++ > > drivers/md/dm-table.c | 25 ++++++++++ > > drivers/md/dm-thin.c | 90 ++++++++++++++++++++++++++++++++++- > > drivers/md/dm.c | 4 ++ > > include/linux/device-mapper.h | 11 +++++ > > 7 files changed, 139 insertions(+), 3 deletions(-) > > > ... > > diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c > > index 64cfcf46881d..ab3f1abfabaf 100644 > > --- a/drivers/md/dm-thin.c > > +++ b/drivers/md/dm-thin.c > ... > > @@ -1980,6 +1992,70 @@ static void process_cell(struct thin_c *tc, stru= ct dm_bio_prison_cell *cell) > > } > > } > > > > +static void process_provision_cell(struct thin_c *tc, struct dm_bio_pr= ison_cell *cell) > > +{ > > + int r; > > + struct pool *pool =3D tc->pool; > > + struct bio *bio =3D cell->holder; > > + dm_block_t begin, end; > > + struct dm_thin_lookup_result lookup_result; > > + > > + if (tc->requeue_mode) { > > + cell_requeue(pool, cell); > > + return; > > + } > > + > > + get_bio_block_range(tc, bio, &begin, &end); > > + > > + while (begin !=3D end) { > > + r =3D ensure_next_mapping(pool); > > + if (r) > > + /* we did our best */ > > + return; > > + > > + r =3D dm_thin_find_block(tc->td, begin, 1, &lookup_result= ); > > Hi Sarthak, > > I think we discussed this before.. but remind me if/how we wanted to > handle the case if the thin blocks are shared..? Would a provision op > carry enough information to distinguish an FALLOC_FL_UNSHARE_RANGE > request from upper layers to conditionally provision in that case? > I think that should depend on how the filesystem implements unsharing: assuming that we use provision on first allocation, unsharing on xfs should result in xfs calling REQ_OP_PROVISION on the newly allocated blocks first. But for ext4, we'd fail UNSHARE_RANGE unless provision (instead of noprovision, provision_on_alloc), in which case, we'd send REQ_OP_PROVISION. Best Sarthak Sarthak > Brian > > > + switch (r) { > > + case 0: > > + begin++; > > + break; > > + case -ENODATA: > > + bio_inc_remaining(bio); > > + provision_block(tc, bio, begin, cell); > > + begin++; > > + break; > > + default: > > + DMERR_LIMIT( > > + "%s: dm_thin_find_block() failed: error = =3D %d", > > + __func__, r); > > + cell_defer_no_holder(tc, cell); > > + bio_io_error(bio); > > + begin++; > > + break; > > + } > > + } > > + bio_endio(bio); > > + cell_defer_no_holder(tc, cell); > > +} > > + > > +static void process_provision_bio(struct thin_c *tc, struct bio *bio) > > +{ > > + dm_block_t begin, end; > > + struct dm_cell_key virt_key; > > + struct dm_bio_prison_cell *virt_cell; > > + > > + get_bio_block_range(tc, bio, &begin, &end); > > + if (begin =3D=3D end) { > > + bio_endio(bio); > > + return; > > + } > > + > > + build_key(tc->td, VIRTUAL, begin, end, &virt_key); > > + if (bio_detain(tc->pool, &virt_key, bio, &virt_cell)) > > + return; > > + > > + process_provision_cell(tc, virt_cell); > > +} > > + > > static void process_bio(struct thin_c *tc, struct bio *bio) > > { > > struct pool *pool =3D tc->pool; > > @@ -2200,6 +2276,8 @@ static void process_thin_deferred_bios(struct thi= n_c *tc) > > > > if (bio_op(bio) =3D=3D REQ_OP_DISCARD) > > pool->process_discard(tc, bio); > > + else if (bio_op(bio) =3D=3D REQ_OP_PROVISION) > > + process_provision_bio(tc, bio); > > else > > pool->process_bio(tc, bio); > > > > @@ -2716,7 +2794,8 @@ static int thin_bio_map(struct dm_target *ti, str= uct bio *bio) > > return DM_MAPIO_SUBMITTED; > > } > > > > - if (op_is_flush(bio->bi_opf) || bio_op(bio) =3D=3D REQ_OP_DISCARD= ) { > > + if (op_is_flush(bio->bi_opf) || bio_op(bio) =3D=3D REQ_OP_DISCARD= || > > + bio_op(bio) =3D=3D REQ_OP_PROVISION) { > > thin_defer_bio_with_throttle(tc, bio); > > return DM_MAPIO_SUBMITTED; > > } > > @@ -3355,6 +3434,8 @@ static int pool_ctr(struct dm_target *ti, unsigne= d argc, char **argv) > > pt->low_water_blocks =3D low_water_blocks; > > pt->adjusted_pf =3D pt->requested_pf =3D pf; > > ti->num_flush_bios =3D 1; > > + ti->num_provision_bios =3D 1; > > + ti->provision_supported =3D true; > > > > /* > > * Only need to enable discards if the pool should pass > > @@ -4053,6 +4134,7 @@ static void pool_io_hints(struct dm_target *ti, s= truct queue_limits *limits) > > blk_limits_io_opt(limits, pool->sectors_per_block << SECT= OR_SHIFT); > > } > > > > + > > /* > > * pt->adjusted_pf is a staging area for the actual features to u= se. > > * They get transferred to the live pool in bind_control_target() > > @@ -4243,6 +4325,9 @@ static int thin_ctr(struct dm_target *ti, unsigne= d argc, char **argv) > > ti->num_discard_bios =3D 1; > > } > > > > + ti->num_provision_bios =3D 1; > > + ti->provision_supported =3D true; > > + > > mutex_unlock(&dm_thin_pool_table.mutex); > > > > spin_lock_irq(&tc->pool->lock); > > @@ -4457,6 +4542,7 @@ static void thin_io_hints(struct dm_target *ti, s= truct queue_limits *limits) > > > > limits->discard_granularity =3D pool->sectors_per_block << SECTOR= _SHIFT; > > limits->max_discard_sectors =3D 2048 * 1024 * 16; /* 16G */ > > + limits->max_provision_sectors =3D 2048 * 1024 * 16; /* 16G */ > > } > > > > static struct target_type thin_target =3D { > > diff --git a/drivers/md/dm.c b/drivers/md/dm.c > > index e1ea3a7bd9d9..4d19bae9da4a 100644 > > --- a/drivers/md/dm.c > > +++ b/drivers/md/dm.c > > @@ -1587,6 +1587,7 @@ static bool is_abnormal_io(struct bio *bio) > > case REQ_OP_DISCARD: > > case REQ_OP_SECURE_ERASE: > > case REQ_OP_WRITE_ZEROES: > > + case REQ_OP_PROVISION: > > return true; > > default: > > break; > > @@ -1611,6 +1612,9 @@ static blk_status_t __process_abnormal_io(struct = clone_info *ci, > > case REQ_OP_WRITE_ZEROES: > > num_bios =3D ti->num_write_zeroes_bios; > > break; > > + case REQ_OP_PROVISION: > > + num_bios =3D ti->num_provision_bios; > > + break; > > default: > > break; > > } > > diff --git a/include/linux/device-mapper.h b/include/linux/device-mappe= r.h > > index 04c6acf7faaa..b4d97d5d75b8 100644 > > --- a/include/linux/device-mapper.h > > +++ b/include/linux/device-mapper.h > > @@ -333,6 +333,12 @@ struct dm_target { > > */ > > unsigned num_write_zeroes_bios; > > > > + /* > > + * The number of PROVISION bios that will be submitted to the tar= get. > > + * The bio number can be accessed with dm_bio_get_target_bio_nr. > > + */ > > + unsigned num_provision_bios; > > + > > /* > > * The minimum number of extra bytes allocated in each io for the > > * target to use. > > @@ -357,6 +363,11 @@ struct dm_target { > > */ > > bool discards_supported:1; > > > > + /* Set if this target needs to receive provision requests regardl= ess of > > + * whether or not its underlying devices have support. > > + */ > > + bool provision_supported:1; > > + > > /* > > * Set if we need to limit the number of in-flight bios when swap= ping. > > */ > > -- > > 2.37.3 > > > 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 us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 B1497C77B6E for ; Fri, 31 Mar 2023 05:22:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1680240172; h=from:from:sender: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:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=/E8hd8cH6KleLkn8boaHgwhUElE0PK8mYRJPOX2DjLk=; b=ADgKdBZEsfq+t45WRzEIGODqgNM9ipe1UpnmEl7ATo2VI7DjnM/Jv4ZsWer6KkavBFMGE3 m2+M4vL6y0RG8ClQDZC11ewPHNesTgB4q9OJj36oH351aE6d0DuvHau248g6q5NbCag/nW jRDN/s6UPhjVvde2fYmwT4e9RJcMj6A= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-400-3pxY2IpHOTiPKhmrf8zN0A-1; Fri, 31 Mar 2023 01:22:49 -0400 X-MC-Unique: 3pxY2IpHOTiPKhmrf8zN0A-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id E6B0F3C0F1BA; Fri, 31 Mar 2023 05:22:46 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id CF3A91121315; Fri, 31 Mar 2023 05:22:46 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id A54BC1946A7B; Fri, 31 Mar 2023 05:22:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 077871946587 for ; Fri, 31 Mar 2023 00:30:36 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id B8250492C3E; Fri, 31 Mar 2023 00:30:36 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast03.extmail.prod.ext.rdu2.redhat.com [10.11.55.19]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B09D4492B00 for ; Fri, 31 Mar 2023 00:30:36 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 931E9811E7C for ; Fri, 31 Mar 2023 00:30:36 +0000 (UTC) Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-588-cgtbKeY-ONSUkl6ygIKsWQ-1; Thu, 30 Mar 2023 20:30:34 -0400 X-MC-Unique: cgtbKeY-ONSUkl6ygIKsWQ-1 Received: by mail-ed1-f45.google.com with SMTP id r11so83464670edd.5 for ; Thu, 30 Mar 2023 17:30:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680222633; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=s3r5eQncDU04l860YNWqLD6wbbCGIfGDlp9mbjOhdOU=; b=B6NNWYpa26Oe9gcd6O1KA7Buid4EA2/aXzgUd4zXsrEGl9z/+lXYBjoAeNWnd4Vo6s v6XrL1738v24mCo9r5BnDaAAWu9taNZhi9ESufW/Sz4YfsWaNbvumg4wCUbEbTr6T4UG YyZPxyEYXA6K4DJHu+0fJh7JcLoV5xpUPi0w0VIAdv0XJWkusNahpBf4TixyEhLg867V p+fduat+2ZjgxINEFIghstKGUPp4wu3Db1LEKfT4/pDNVELlS8KCSKmOBJPUsnn1xlXY 3arbw6YrSgueBvSw4RzIXBMhnJ7L6MHUQ8mV8Ir6mXbUsIKT9Ns3wVtM+5y3tJS+0vpH vlpg== X-Gm-Message-State: AAQBX9ekJz1Uc62If8HYGX/KJteVItvtaEWFr5FzBjdOjl2a8NDzupoB 6qplSOjdMgba6LNLDWoPx5YBE1anDqqz9zgBmYg9cA== X-Google-Smtp-Source: AKy350bUrFjid7TXbTeqMBKOpuNLpzymdFUzXKXUsWM99Dh5ebCTsP5lJJEB9dpSdwE6OtCHBeIdQ5BHXLCCKNvPA98= X-Received: by 2002:a17:907:d687:b0:93d:a14f:c9b4 with SMTP id wf7-20020a170907d68700b0093da14fc9b4mr12727665ejc.2.1680222633437; Thu, 30 Mar 2023 17:30:33 -0700 (PDT) MIME-Version: 1.0 References: <20221229081252.452240-1-sarthakkukreti@chromium.org> <20221229081252.452240-3-sarthakkukreti@chromium.org> In-Reply-To: From: Sarthak Kukreti Date: Thu, 30 Mar 2023 17:30:22 -0700 Message-ID: To: Brian Foster X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Mailman-Approved-At: Fri, 31 Mar 2023 05:22:41 +0000 Subject: Re: [dm-devel] [PATCH v2 2/7] dm: Add support for block provisioning X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jens Axboe , Christoph Hellwig , Theodore Ts'o , "Michael S. Tsirkin" , sarthakkukreti@google.com, "Darrick J. Wong" , Jason Wang , Bart Van Assche , Mike Snitzer , linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, dm-devel@redhat.com, Andreas Dilger , Daniil Lunev , Stefan Hajnoczi , linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, Alasdair Kergon Errors-To: dm-devel-bounces@redhat.com Sender: "dm-devel" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: chromium.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gVGh1LCBKYW4gNSwgMjAyMyBhdCA2OjQy4oCvQU0gQnJpYW4gRm9zdGVyIDxiZm9zdGVyQHJl ZGhhdC5jb20+IHdyb3RlOgo+Cj4gT24gVGh1LCBEZWMgMjksIDIwMjIgYXQgMTI6MTI6NDdBTSAt MDgwMCwgU2FydGhhayBLdWtyZXRpIHdyb3RlOgo+ID4gQWRkIHN1cHBvcnQgdG8gZG0gZGV2aWNl cyBmb3IgUkVRX09QX1BST1ZJU0lPTi4gVGhlIGRlZmF1bHQgbW9kZQo+ID4gaXMgdG8gcGFzcyB0 aHJvdWdoIHRoZSByZXF1ZXN0IGFuZCBkbS10aGluIHdpbGwgdXRpbGl6ZSBpdCB0byBwcm92aXNp b24KPiA+IGJsb2Nrcy4KPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBTYXJ0aGFrIEt1a3JldGkgPHNh cnRoYWtrdWtyZXRpQGNocm9taXVtLm9yZz4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvbWQvZG0tY3J5 cHQuYyAgICAgICAgIHwgIDQgKy0KPiA+ICBkcml2ZXJzL21kL2RtLWxpbmVhci5jICAgICAgICB8 ICAxICsKPiA+ICBkcml2ZXJzL21kL2RtLXNuYXAuYyAgICAgICAgICB8ICA3ICsrKwo+ID4gIGRy aXZlcnMvbWQvZG0tdGFibGUuYyAgICAgICAgIHwgMjUgKysrKysrKysrKwo+ID4gIGRyaXZlcnMv bWQvZG0tdGhpbi5jICAgICAgICAgIHwgOTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0KPiA+ICBkcml2ZXJzL21kL2RtLmMgICAgICAgICAgICAgICB8ICA0ICsrCj4gPiAgaW5j bHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmggfCAxMSArKysrKwo+ID4gIDcgZmlsZXMgY2hhbmdl ZCwgMTM5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4gPgo+IC4uLgo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbWQvZG0tdGhpbi5jIGIvZHJpdmVycy9tZC9kbS10aGluLmMKPiA+IGlu ZGV4IDY0Y2ZjZjQ2ODgxZC4uYWIzZjFhYmZhYmFmIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9t ZC9kbS10aGluLmMKPiA+ICsrKyBiL2RyaXZlcnMvbWQvZG0tdGhpbi5jCj4gLi4uCj4gPiBAQCAt MTk4MCw2ICsxOTkyLDcwIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfY2VsbChzdHJ1Y3QgdGhpbl9j ICp0Yywgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKPiA+ICAgICAgIH0KPiA+ICB9 Cj4gPgo+ID4gK3N0YXRpYyB2b2lkIHByb2Nlc3NfcHJvdmlzaW9uX2NlbGwoc3RydWN0IHRoaW5f YyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCj4gPiArewo+ID4gKyAgICAg aW50IHI7Cj4gPiArICAgICBzdHJ1Y3QgcG9vbCAqcG9vbCA9IHRjLT5wb29sOwo+ID4gKyAgICAg c3RydWN0IGJpbyAqYmlvID0gY2VsbC0+aG9sZGVyOwo+ID4gKyAgICAgZG1fYmxvY2tfdCBiZWdp biwgZW5kOwo+ID4gKyAgICAgc3RydWN0IGRtX3RoaW5fbG9va3VwX3Jlc3VsdCBsb29rdXBfcmVz dWx0Owo+ID4gKwo+ID4gKyAgICAgaWYgKHRjLT5yZXF1ZXVlX21vZGUpIHsKPiA+ICsgICAgICAg ICAgICAgY2VsbF9yZXF1ZXVlKHBvb2wsIGNlbGwpOwo+ID4gKyAgICAgICAgICAgICByZXR1cm47 Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBnZXRfYmlvX2Jsb2NrX3JhbmdlKHRjLCBiaW8s ICZiZWdpbiwgJmVuZCk7Cj4gPiArCj4gPiArICAgICB3aGlsZSAoYmVnaW4gIT0gZW5kKSB7Cj4g PiArICAgICAgICAgICAgIHIgPSBlbnN1cmVfbmV4dF9tYXBwaW5nKHBvb2wpOwo+ID4gKyAgICAg ICAgICAgICBpZiAocikKPiA+ICsgICAgICAgICAgICAgICAgICAgICAvKiB3ZSBkaWQgb3VyIGJl c3QgKi8KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cj4gPiArCj4gPiArICAgICAg ICAgICAgIHIgPSBkbV90aGluX2ZpbmRfYmxvY2sodGMtPnRkLCBiZWdpbiwgMSwgJmxvb2t1cF9y ZXN1bHQpOwo+Cj4gSGkgU2FydGhhaywKPgo+IEkgdGhpbmsgd2UgZGlzY3Vzc2VkIHRoaXMgYmVm b3JlLi4gYnV0IHJlbWluZCBtZSBpZi9ob3cgd2Ugd2FudGVkIHRvCj4gaGFuZGxlIHRoZSBjYXNl IGlmIHRoZSB0aGluIGJsb2NrcyBhcmUgc2hhcmVkLi4/IFdvdWxkIGEgcHJvdmlzaW9uIG9wCj4g Y2FycnkgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRpc3Rpbmd1aXNoIGFuIEZBTExPQ19GTF9VTlNI QVJFX1JBTkdFCj4gcmVxdWVzdCBmcm9tIHVwcGVyIGxheWVycyB0byBjb25kaXRpb25hbGx5IHBy b3Zpc2lvbiBpbiB0aGF0IGNhc2U/Cj4KSSB0aGluayB0aGF0IHNob3VsZCBkZXBlbmQgb24gaG93 IHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudHMgdW5zaGFyaW5nOgphc3N1bWluZyB0aGF0IHdlIHVz ZSBwcm92aXNpb24gb24gZmlyc3QgYWxsb2NhdGlvbiwgdW5zaGFyaW5nIG9uIHhmcwpzaG91bGQg cmVzdWx0IGluIHhmcyBjYWxsaW5nIFJFUV9PUF9QUk9WSVNJT04gb24gdGhlIG5ld2x5IGFsbG9j YXRlZApibG9ja3MgZmlyc3QuIEJ1dCBmb3IgZXh0NCwgd2UnZCBmYWlsIFVOU0hBUkVfUkFOR0Ug dW5sZXNzIHByb3Zpc2lvbgooaW5zdGVhZCBvZiBub3Byb3Zpc2lvbiwgcHJvdmlzaW9uX29uX2Fs bG9jKSwgaW4gd2hpY2ggY2FzZSwgd2UnZCBzZW5kClJFUV9PUF9QUk9WSVNJT04uCgpCZXN0ClNh cnRoYWsKCgpTYXJ0aGFrCgo+IEJyaWFuCj4KPiA+ICsgICAgICAgICAgICAgc3dpdGNoIChyKSB7 Cj4gPiArICAgICAgICAgICAgIGNhc2UgMDoKPiA+ICsgICAgICAgICAgICAgICAgICAgICBiZWdp bisrOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAgICBj YXNlIC1FTk9EQVRBOgo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJpb19pbmNfcmVtYWluaW5n KGJpbyk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcHJvdmlzaW9uX2Jsb2NrKHRjLCBiaW8s IGJlZ2luLCBjZWxsKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBiZWdpbisrOwo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAgICBkZWZhdWx0Ogo+ID4g KyAgICAgICAgICAgICAgICAgICAgIERNRVJSX0xJTUlUKAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIiVzOiBkbV90aGluX2ZpbmRfYmxvY2soKSBmYWlsZWQ6IGVycm9yID0gJWQi LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHIpOwo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIGNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBjZWxsKTsKPiA+ICsg ICAgICAgICAgICAgICAgICAgICBiaW9faW9fZXJyb3IoYmlvKTsKPiA+ICsgICAgICAgICAgICAg ICAgICAgICBiZWdpbisrOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAg ICAgICAgICAgICB9Cj4gPiArICAgICB9Cj4gPiArICAgICBiaW9fZW5kaW8oYmlvKTsKPiA+ICsg ICAgIGNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBjZWxsKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQgcHJvY2Vzc19wcm92aXNpb25fYmlvKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3Qg YmlvICpiaW8pCj4gPiArewo+ID4gKyAgICAgZG1fYmxvY2tfdCBiZWdpbiwgZW5kOwo+ID4gKyAg ICAgc3RydWN0IGRtX2NlbGxfa2V5IHZpcnRfa2V5Owo+ID4gKyAgICAgc3RydWN0IGRtX2Jpb19w cmlzb25fY2VsbCAqdmlydF9jZWxsOwo+ID4gKwo+ID4gKyAgICAgZ2V0X2Jpb19ibG9ja19yYW5n ZSh0YywgYmlvLCAmYmVnaW4sICZlbmQpOwo+ID4gKyAgICAgaWYgKGJlZ2luID09IGVuZCkgewo+ ID4gKyAgICAgICAgICAgICBiaW9fZW5kaW8oYmlvKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJu Owo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgYnVpbGRfa2V5KHRjLT50ZCwgVklSVFVBTCwg YmVnaW4sIGVuZCwgJnZpcnRfa2V5KTsKPiA+ICsgICAgIGlmIChiaW9fZGV0YWluKHRjLT5wb29s LCAmdmlydF9rZXksIGJpbywgJnZpcnRfY2VsbCkpCj4gPiArICAgICAgICAgICAgIHJldHVybjsK PiA+ICsKPiA+ICsgICAgIHByb2Nlc3NfcHJvdmlzaW9uX2NlbGwodGMsIHZpcnRfY2VsbCk7Cj4g PiArfQo+ID4gKwo+ID4gIHN0YXRpYyB2b2lkIHByb2Nlc3NfYmlvKHN0cnVjdCB0aGluX2MgKnRj LCBzdHJ1Y3QgYmlvICpiaW8pCj4gPiAgewo+ID4gICAgICAgc3RydWN0IHBvb2wgKnBvb2wgPSB0 Yy0+cG9vbDsKPiA+IEBAIC0yMjAwLDYgKzIyNzYsOCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3Ro aW5fZGVmZXJyZWRfYmlvcyhzdHJ1Y3QgdGhpbl9jICp0YykKPiA+Cj4gPiAgICAgICAgICAgICAg IGlmIChiaW9fb3AoYmlvKSA9PSBSRVFfT1BfRElTQ0FSRCkKPiA+ICAgICAgICAgICAgICAgICAg ICAgICBwb29sLT5wcm9jZXNzX2Rpc2NhcmQodGMsIGJpbyk7Cj4gPiArICAgICAgICAgICAgIGVs c2UgaWYgKGJpb19vcChiaW8pID09IFJFUV9PUF9QUk9WSVNJT04pCj4gPiArICAgICAgICAgICAg ICAgICAgICAgcHJvY2Vzc19wcm92aXNpb25fYmlvKHRjLCBiaW8pOwo+ID4gICAgICAgICAgICAg ICBlbHNlCj4gPiAgICAgICAgICAgICAgICAgICAgICAgcG9vbC0+cHJvY2Vzc19iaW8odGMsIGJp byk7Cj4gPgo+ID4gQEAgLTI3MTYsNyArMjc5NCw4IEBAIHN0YXRpYyBpbnQgdGhpbl9iaW9fbWFw KHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8pCj4gPiAgICAgICAgICAgICAg IHJldHVybiBETV9NQVBJT19TVUJNSVRURUQ7Cj4gPiAgICAgICB9Cj4gPgo+ID4gLSAgICAgaWYg KG9wX2lzX2ZsdXNoKGJpby0+Ymlfb3BmKSB8fCBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfRElTQ0FS RCkgewo+ID4gKyAgICAgaWYgKG9wX2lzX2ZsdXNoKGJpby0+Ymlfb3BmKSB8fCBiaW9fb3AoYmlv KSA9PSBSRVFfT1BfRElTQ0FSRCB8fAo+ID4gKyAgICAgICAgIGJpb19vcChiaW8pID09IFJFUV9P UF9QUk9WSVNJT04pIHsKPiA+ICAgICAgICAgICAgICAgdGhpbl9kZWZlcl9iaW9fd2l0aF90aHJv dHRsZSh0YywgYmlvKTsKPiA+ICAgICAgICAgICAgICAgcmV0dXJuIERNX01BUElPX1NVQk1JVFRF RDsKPiA+ICAgICAgIH0KPiA+IEBAIC0zMzU1LDYgKzM0MzQsOCBAQCBzdGF0aWMgaW50IHBvb2xf Y3RyKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBhcmdjLCBjaGFyICoqYXJndikKPiA+ ICAgICAgIHB0LT5sb3dfd2F0ZXJfYmxvY2tzID0gbG93X3dhdGVyX2Jsb2NrczsKPiA+ICAgICAg IHB0LT5hZGp1c3RlZF9wZiA9IHB0LT5yZXF1ZXN0ZWRfcGYgPSBwZjsKPiA+ICAgICAgIHRpLT5u dW1fZmx1c2hfYmlvcyA9IDE7Cj4gPiArICAgICB0aS0+bnVtX3Byb3Zpc2lvbl9iaW9zID0gMTsK PiA+ICsgICAgIHRpLT5wcm92aXNpb25fc3VwcG9ydGVkID0gdHJ1ZTsKPiA+Cj4gPiAgICAgICAv Kgo+ID4gICAgICAgICogT25seSBuZWVkIHRvIGVuYWJsZSBkaXNjYXJkcyBpZiB0aGUgcG9vbCBz aG91bGQgcGFzcwo+ID4gQEAgLTQwNTMsNiArNDEzNCw3IEBAIHN0YXRpYyB2b2lkIHBvb2xfaW9f aGludHMoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbWl0cykK PiA+ICAgICAgICAgICAgICAgYmxrX2xpbWl0c19pb19vcHQobGltaXRzLCBwb29sLT5zZWN0b3Jz X3Blcl9ibG9jayA8PCBTRUNUT1JfU0hJRlQpOwo+ID4gICAgICAgfQo+ID4KPiA+ICsKPiA+ICAg ICAgIC8qCj4gPiAgICAgICAgKiBwdC0+YWRqdXN0ZWRfcGYgaXMgYSBzdGFnaW5nIGFyZWEgZm9y IHRoZSBhY3R1YWwgZmVhdHVyZXMgdG8gdXNlLgo+ID4gICAgICAgICogVGhleSBnZXQgdHJhbnNm ZXJyZWQgdG8gdGhlIGxpdmUgcG9vbCBpbiBiaW5kX2NvbnRyb2xfdGFyZ2V0KCkKPiA+IEBAIC00 MjQzLDYgKzQzMjUsOSBAQCBzdGF0aWMgaW50IHRoaW5fY3RyKHN0cnVjdCBkbV90YXJnZXQgKnRp LCB1bnNpZ25lZCBhcmdjLCBjaGFyICoqYXJndikKPiA+ICAgICAgICAgICAgICAgdGktPm51bV9k aXNjYXJkX2Jpb3MgPSAxOwo+ID4gICAgICAgfQo+ID4KPiA+ICsgICAgIHRpLT5udW1fcHJvdmlz aW9uX2Jpb3MgPSAxOwo+ID4gKyAgICAgdGktPnByb3Zpc2lvbl9zdXBwb3J0ZWQgPSB0cnVlOwo+ ID4gKwo+ID4gICAgICAgbXV0ZXhfdW5sb2NrKCZkbV90aGluX3Bvb2xfdGFibGUubXV0ZXgpOwo+ ID4KPiA+ICAgICAgIHNwaW5fbG9ja19pcnEoJnRjLT5wb29sLT5sb2NrKTsKPiA+IEBAIC00NDU3 LDYgKzQ1NDIsNyBAQCBzdGF0aWMgdm9pZCB0aGluX2lvX2hpbnRzKHN0cnVjdCBkbV90YXJnZXQg KnRpLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1pdHMpCj4gPgo+ID4gICAgICAgbGltaXRzLT5k aXNjYXJkX2dyYW51bGFyaXR5ID0gcG9vbC0+c2VjdG9yc19wZXJfYmxvY2sgPDwgU0VDVE9SX1NI SUZUOwo+ID4gICAgICAgbGltaXRzLT5tYXhfZGlzY2FyZF9zZWN0b3JzID0gMjA0OCAqIDEwMjQg KiAxNjsgLyogMTZHICovCj4gPiArICAgICBsaW1pdHMtPm1heF9wcm92aXNpb25fc2VjdG9ycyA9 IDIwNDggKiAxMDI0ICogMTY7IC8qIDE2RyAqLwo+ID4gIH0KPiA+Cj4gPiAgc3RhdGljIHN0cnVj dCB0YXJnZXRfdHlwZSB0aGluX3RhcmdldCA9IHsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21k L2RtLmMgYi9kcml2ZXJzL21kL2RtLmMKPiA+IGluZGV4IGUxZWEzYTdiZDlkOS4uNGQxOWJhZTlk YTRhIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9tZC9kbS5jCj4gPiArKysgYi9kcml2ZXJzL21k L2RtLmMKPiA+IEBAIC0xNTg3LDYgKzE1ODcsNyBAQCBzdGF0aWMgYm9vbCBpc19hYm5vcm1hbF9p byhzdHJ1Y3QgYmlvICpiaW8pCj4gPiAgICAgICAgICAgICAgIGNhc2UgUkVRX09QX0RJU0NBUkQ6 Cj4gPiAgICAgICAgICAgICAgIGNhc2UgUkVRX09QX1NFQ1VSRV9FUkFTRToKPiA+ICAgICAgICAg ICAgICAgY2FzZSBSRVFfT1BfV1JJVEVfWkVST0VTOgo+ID4gKyAgICAgICAgICAgICBjYXNlIFJF UV9PUF9QUk9WSVNJT046Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4g PiAgICAgICAgICAgICAgIGRlZmF1bHQ6Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Cj4gPiBAQCAtMTYxMSw2ICsxNjEyLDkgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBfX3Byb2Nlc3Nf YWJub3JtYWxfaW8oc3RydWN0IGNsb25lX2luZm8gKmNpLAo+ID4gICAgICAgY2FzZSBSRVFfT1Bf V1JJVEVfWkVST0VTOgo+ID4gICAgICAgICAgICAgICBudW1fYmlvcyA9IHRpLT5udW1fd3JpdGVf emVyb2VzX2Jpb3M7Cj4gPiAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgY2FzZSBSRVFf T1BfUFJPVklTSU9OOgo+ID4gKyAgICAgICAgICAgICBudW1fYmlvcyA9IHRpLT5udW1fcHJvdmlz aW9uX2Jpb3M7Cj4gPiArICAgICAgICAgICAgIGJyZWFrOwo+ID4gICAgICAgZGVmYXVsdDoKPiA+ ICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiAgICAgICB9Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9saW51eC9kZXZpY2UtbWFwcGVyLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaAo+ ID4gaW5kZXggMDRjNmFjZjdmYWFhLi5iNGQ5N2Q1ZDc1YjggMTAwNjQ0Cj4gPiAtLS0gYS9pbmNs dWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaAo+ID4gKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2Ut bWFwcGVyLmgKPiA+IEBAIC0zMzMsNiArMzMzLDEyIEBAIHN0cnVjdCBkbV90YXJnZXQgewo+ID4g ICAgICAgICovCj4gPiAgICAgICB1bnNpZ25lZCBudW1fd3JpdGVfemVyb2VzX2Jpb3M7Cj4gPgo+ ID4gKyAgICAgLyoKPiA+ICsgICAgICAqIFRoZSBudW1iZXIgb2YgUFJPVklTSU9OIGJpb3MgdGhh dCB3aWxsIGJlIHN1Ym1pdHRlZCB0byB0aGUgdGFyZ2V0Lgo+ID4gKyAgICAgICogVGhlIGJpbyBu dW1iZXIgY2FuIGJlIGFjY2Vzc2VkIHdpdGggZG1fYmlvX2dldF90YXJnZXRfYmlvX25yLgo+ID4g KyAgICAgICovCj4gPiArICAgICB1bnNpZ25lZCBudW1fcHJvdmlzaW9uX2Jpb3M7Cj4gPiArCj4g PiAgICAgICAvKgo+ID4gICAgICAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGV4dHJhIGJ5dGVz IGFsbG9jYXRlZCBpbiBlYWNoIGlvIGZvciB0aGUKPiA+ICAgICAgICAqIHRhcmdldCB0byB1c2Uu Cj4gPiBAQCAtMzU3LDYgKzM2MywxMSBAQCBzdHJ1Y3QgZG1fdGFyZ2V0IHsKPiA+ICAgICAgICAq Lwo+ID4gICAgICAgYm9vbCBkaXNjYXJkc19zdXBwb3J0ZWQ6MTsKPiA+Cj4gPiArICAgICAvKiBT ZXQgaWYgdGhpcyB0YXJnZXQgbmVlZHMgdG8gcmVjZWl2ZSBwcm92aXNpb24gcmVxdWVzdHMgcmVn YXJkbGVzcyBvZgo+ID4gKyAgICAgICogd2hldGhlciBvciBub3QgaXRzIHVuZGVybHlpbmcgZGV2 aWNlcyBoYXZlIHN1cHBvcnQuCj4gPiArICAgICAgKi8KPiA+ICsgICAgIGJvb2wgcHJvdmlzaW9u X3N1cHBvcnRlZDoxOwo+ID4gKwo+ID4gICAgICAgLyoKPiA+ICAgICAgICAqIFNldCBpZiB3ZSBu ZWVkIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgaW4tZmxpZ2h0IGJpb3Mgd2hlbiBzd2FwcGluZy4K PiA+ICAgICAgICAqLwo+ID4gLS0KPiA+IDIuMzcuMwo+ID4KPgoKLS0KZG0tZGV2ZWwgbWFpbGlu ZyBsaXN0CmRtLWRldmVsQHJlZGhhdC5jb20KaHR0cHM6Ly9saXN0bWFuLnJlZGhhdC5jb20vbWFp bG1hbi9saXN0aW5mby9kbS1kZXZlbAo=