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 4F5E9C6FD18 for ; Fri, 31 Mar 2023 12:27:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232365AbjCaM1T (ORCPT ); Fri, 31 Mar 2023 08:27:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43370 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232426AbjCaM1O (ORCPT ); Fri, 31 Mar 2023 08:27:14 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EB9B21EFE7 for ; Fri, 31 Mar 2023 05:26:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1680265583; 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; bh=DH2TEGtbu6b5LqxnMSb70uBmRZl7fmkRGu9vSpf9xqk=; b=GDffS8CiegSSX1zCNFMEFGaJQdgfQWlg9I8ZkcdY9JtqaG5I5NigMR29o30YrIz9rUVJzL llIg2TPYfcNkubXR39CHFpWjQl8q6tk5WEPkrNMIAkV1i0gWit+wOqP0tKuIj7pZApZowt N2ZXKLTBLyIqvDQjdRuXoU4ReJjOHUQ= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-355-91UnFF8NOFGBu6w3cjbCVQ-1; Fri, 31 Mar 2023 08:26:19 -0400 X-MC-Unique: 91UnFF8NOFGBu6w3cjbCVQ-1 Received: by mail-qk1-f198.google.com with SMTP id 195-20020a3705cc000000b00746a3ab9426so10340655qkf.20 for ; Fri, 31 Mar 2023 05:26:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680265579; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=DH2TEGtbu6b5LqxnMSb70uBmRZl7fmkRGu9vSpf9xqk=; b=nA7M8XdrO7J63T6oerwgoz8zp6oKgARa+46R2GWwavJDEPV66X314GizSw7OGhbGEp wZ8DnQTPFREkWYJejcdnD8viqvJm2K9QhkYd5IC7voZc5d4jP7EspmxpHbHL9Ty49g6f D6KoCSREvbl7k1q5L4muHQLYleUXXLeZlBGqd/I9gkZivojWut9rxsK2GyTb/obDil+q ZgzkesO9zwwdyiCuItSW6DgzlReTRU7TnmGYviTFtZMvxHupE6wOD0dRVpyGAVXocKyp gFCSoWb1ah5IAVKZR8Bd6KkU7lUNobl0V6cAGKzEPLxIAd8o24t9Cc3hGd8md7jfjzJI DNUQ== X-Gm-Message-State: AAQBX9cC8GLoj6y6foF2ZXPuLAU9268PcbBsS2PV9/z6mPn8AgPpAKo1 +2griFv/QgxzNermRd4lUoR+O28YgHQC9XUNgrBwq8FT8RSZK5wlvjLBN7LKQdggDfz9A+J5m/3 ZHjwNFCVAajK5P99mWiQatTI= X-Received: by 2002:ad4:5dc9:0:b0:5ac:fb9a:677f with SMTP id m9-20020ad45dc9000000b005acfb9a677fmr34608106qvh.34.1680265578982; Fri, 31 Mar 2023 05:26:18 -0700 (PDT) X-Google-Smtp-Source: AKy350Z6rYxqMC+gfIXFXxm8RLwpDPGgPB876v8cq7C6XuwWCma4+tnHWKvrv1GKg+lUyow88OEGQA== X-Received: by 2002:ad4:5dc9:0:b0:5ac:fb9a:677f with SMTP id m9-20020ad45dc9000000b005acfb9a677fmr34608064qvh.34.1680265578627; Fri, 31 Mar 2023 05:26:18 -0700 (PDT) Received: from bfoster (c-24-61-119-116.hsd1.ma.comcast.net. [24.61.119.116]) by smtp.gmail.com with ESMTPSA id s11-20020a05621412cb00b005dd8b9345efsm536061qvv.135.2023.03.31.05.26.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Mar 2023 05:26:18 -0700 (PDT) Date: Fri, 31 Mar 2023 08:28:17 -0400 From: Brian Foster To: Sarthak Kukreti 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" Subject: Re: [PATCH v2 2/7] dm: Add support for block provisioning Message-ID: References: <20221229081252.452240-1-sarthakkukreti@chromium.org> <20221229081252.452240-3-sarthakkukreti@chromium.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org On Thu, Mar 30, 2023 at 05:30:22PM -0700, Sarthak Kukreti wrote: > On Thu, Jan 5, 2023 at 6:42 AM Brian Foster wrote: > > > > 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, struct dm_bio_prison_cell *cell) > > > } > > > } > > > > > > +static void process_provision_cell(struct thin_c *tc, struct dm_bio_prison_cell *cell) > > > +{ > > > + int r; > > > + struct pool *pool = tc->pool; > > > + struct bio *bio = 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 != end) { > > > + r = ensure_next_mapping(pool); > > > + if (r) > > > + /* we did our best */ > > > + return; > > > + > > > + r = 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. > I think my question was unclear... It doesn't necessarily have much to do with the filesystem or associated provision policy. Since dm-thin can share blocks internally via snapshots, do you intend to support FL_UNSHARE_RANGE via blkdev_fallocate() and REQ_OP_PROVISION? If so, then presumably this wants an UNSHARE request flag to pair with REQ_OP_PROVISION. Also, the dm-thin code above needs to check whether an existing block it finds is shared and basically do whatever COW breaking is necessary during the PROVISION request. If not, why? And what is expected behavior if blkdev_fallocate() is called with FL_UNSHARE_RANGE? Brian > 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 = %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 == 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 = tc->pool; > > > @@ -2200,6 +2276,8 @@ static void process_thin_deferred_bios(struct thin_c *tc) > > > > > > if (bio_op(bio) == REQ_OP_DISCARD) > > > pool->process_discard(tc, bio); > > > + else if (bio_op(bio) == 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, struct bio *bio) > > > return DM_MAPIO_SUBMITTED; > > > } > > > > > > - if (op_is_flush(bio->bi_opf) || bio_op(bio) == REQ_OP_DISCARD) { > > > + if (op_is_flush(bio->bi_opf) || bio_op(bio) == REQ_OP_DISCARD || > > > + bio_op(bio) == 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, unsigned argc, char **argv) > > > pt->low_water_blocks = low_water_blocks; > > > pt->adjusted_pf = pt->requested_pf = pf; > > > ti->num_flush_bios = 1; > > > + ti->num_provision_bios = 1; > > > + ti->provision_supported = true; > > > > > > /* > > > * Only need to enable discards if the pool should pass > > > @@ -4053,6 +4134,7 @@ static void pool_io_hints(struct dm_target *ti, struct queue_limits *limits) > > > blk_limits_io_opt(limits, pool->sectors_per_block << SECTOR_SHIFT); > > > } > > > > > > + > > > /* > > > * pt->adjusted_pf is a staging area for the actual features to use. > > > * They get transferred to the live pool in bind_control_target() > > > @@ -4243,6 +4325,9 @@ static int thin_ctr(struct dm_target *ti, unsigned argc, char **argv) > > > ti->num_discard_bios = 1; > > > } > > > > > > + ti->num_provision_bios = 1; > > > + ti->provision_supported = 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, struct queue_limits *limits) > > > > > > limits->discard_granularity = pool->sectors_per_block << SECTOR_SHIFT; > > > limits->max_discard_sectors = 2048 * 1024 * 16; /* 16G */ > > > + limits->max_provision_sectors = 2048 * 1024 * 16; /* 16G */ > > > } > > > > > > static struct target_type thin_target = { > > > 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 = ti->num_write_zeroes_bios; > > > break; > > > + case REQ_OP_PROVISION: > > > + num_bios = ti->num_provision_bios; > > > + break; > > > default: > > > break; > > > } > > > diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.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 target. > > > + * 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 regardless 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 swapping. > > > */ > > > -- > > > 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.129.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 B2F39C6FD18 for ; Fri, 31 Mar 2023 12:26:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1680265589; 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=Atc3CluT44zo17/JGfNtev0b/XdrhLk/BzsJJEzLTHk=; b=VlA8THbna9avgyowm7i8R2ZjCEVFahle5aRmFBRyTzlapQmbH+JZfwTyyrpYcX3WvGOrsS DL0ZwXlqVihKTzIPBgZGZdEvj9LUyIigyGzhxIdMva1p3vRnheU8+C6A8WHzDn2h1MZASC Ttt67VgELKeuPXJ6isCY43keDi9eQnI= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-221-Iz2Z4dfWOqSkS038zkqIRQ-1; Fri, 31 Mar 2023 08:26:26 -0400 X-MC-Unique: Iz2Z4dfWOqSkS038zkqIRQ-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A32EF101A531; Fri, 31 Mar 2023 12:26:24 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9108A4020C82; Fri, 31 Mar 2023 12:26:24 +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 70C6D19465BD; Fri, 31 Mar 2023 12:26:24 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 20DC219465BC for ; Fri, 31 Mar 2023 12:26:23 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 00E10202701F; Fri, 31 Mar 2023 12:26:23 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast08.extmail.prod.ext.rdu2.redhat.com [10.11.55.24]) by smtp.corp.redhat.com (Postfix) with ESMTPS id ED5C6202701E for ; Fri, 31 Mar 2023 12:26:22 +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 C978638149B5 for ; Fri, 31 Mar 2023 12:26:22 +0000 (UTC) Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com [209.85.219.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-300-VaDmbAprO5qB1B5ATouP9Q-1; Fri, 31 Mar 2023 08:26:19 -0400 X-MC-Unique: VaDmbAprO5qB1B5ATouP9Q-1 Received: by mail-qv1-f71.google.com with SMTP id j15-20020a0cc34f000000b005c824064b10so9665248qvi.17 for ; Fri, 31 Mar 2023 05:26:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680265579; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=DH2TEGtbu6b5LqxnMSb70uBmRZl7fmkRGu9vSpf9xqk=; b=VsdaOUX8dRDHTBuoGieccQ/JWd0pyReet6nkQOXP8ogdGsDU+UxskLBCCZq/2B7PTM 15PUeoPX1FUD3t/6syTHNev1Bgg3MTqd4XcWrAHUS7mVaoDmZKh+LkwjSgY0ve+StxrD uAuMHiUn5FKwlp8t0YwhUv7kX0WF8r5CAhSyq0My7n1xsRUIaRj6ZyZgn5IVZdaBG7nM fRuiDjPzD5/IUZyziFru6vSjzsKTha/rnyM6fLI39LpIBWmLwwxn51J66c21W5/Ql+mJ KrbqnmyaydhfilGxNUechyQHG6k93cM58v1czsPp36YlD9uPAmLMlidlx1FbkX6ups3P 6phA== X-Gm-Message-State: AAQBX9dAMZ/nMzsOhoWdwI71yaowfhTINeCSfTQqDrszDx6uPSCWtX0u vq9o7KlFC78ES5ujGUtFpcH5kKrwC0wdRTYkDztCkXmrt5uK+IP4Zi3pcQT03mFuafu0Q4T9kZk FS5DS+gSP3U0fkl4= X-Received: by 2002:ad4:5dc9:0:b0:5ac:fb9a:677f with SMTP id m9-20020ad45dc9000000b005acfb9a677fmr34608105qvh.34.1680265578982; Fri, 31 Mar 2023 05:26:18 -0700 (PDT) X-Google-Smtp-Source: AKy350Z6rYxqMC+gfIXFXxm8RLwpDPGgPB876v8cq7C6XuwWCma4+tnHWKvrv1GKg+lUyow88OEGQA== X-Received: by 2002:ad4:5dc9:0:b0:5ac:fb9a:677f with SMTP id m9-20020ad45dc9000000b005acfb9a677fmr34608064qvh.34.1680265578627; Fri, 31 Mar 2023 05:26:18 -0700 (PDT) Received: from bfoster (c-24-61-119-116.hsd1.ma.comcast.net. [24.61.119.116]) by smtp.gmail.com with ESMTPSA id s11-20020a05621412cb00b005dd8b9345efsm536061qvv.135.2023.03.31.05.26.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Mar 2023 05:26:18 -0700 (PDT) Date: Fri, 31 Mar 2023 08:28:17 -0400 From: Brian Foster To: Sarthak Kukreti Message-ID: References: <20221229081252.452240-1-sarthakkukreti@chromium.org> <20221229081252.452240-3-sarthakkukreti@chromium.org> MIME-Version: 1.0 In-Reply-To: X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 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.2 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Disposition: inline Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gVGh1LCBNYXIgMzAsIDIwMjMgYXQgMDU6MzA6MjJQTSAtMDcwMCwgU2FydGhhayBLdWtyZXRp IHdyb3RlOgo+IE9uIFRodSwgSmFuIDUsIDIwMjMgYXQgNjo0MuKAr0FNIEJyaWFuIEZvc3RlciA8 YmZvc3RlckByZWRoYXQuY29tPiB3cm90ZToKPiA+Cj4gPiBPbiBUaHUsIERlYyAyOSwgMjAyMiBh dCAxMjoxMjo0N0FNIC0wODAwLCBTYXJ0aGFrIEt1a3JldGkgd3JvdGU6Cj4gPiA+IEFkZCBzdXBw b3J0IHRvIGRtIGRldmljZXMgZm9yIFJFUV9PUF9QUk9WSVNJT04uIFRoZSBkZWZhdWx0IG1vZGUK PiA+ID4gaXMgdG8gcGFzcyB0aHJvdWdoIHRoZSByZXF1ZXN0IGFuZCBkbS10aGluIHdpbGwgdXRp bGl6ZSBpdCB0byBwcm92aXNpb24KPiA+ID4gYmxvY2tzLgo+ID4gPgo+ID4gPiBTaWduZWQtb2Zm LWJ5OiBTYXJ0aGFrIEt1a3JldGkgPHNhcnRoYWtrdWtyZXRpQGNocm9taXVtLm9yZz4KPiA+ID4g LS0tCj4gPiA+ICBkcml2ZXJzL21kL2RtLWNyeXB0LmMgICAgICAgICB8ICA0ICstCj4gPiA+ICBk cml2ZXJzL21kL2RtLWxpbmVhci5jICAgICAgICB8ICAxICsKPiA+ID4gIGRyaXZlcnMvbWQvZG0t c25hcC5jICAgICAgICAgIHwgIDcgKysrCj4gPiA+ICBkcml2ZXJzL21kL2RtLXRhYmxlLmMgICAg ICAgICB8IDI1ICsrKysrKysrKysKPiA+ID4gIGRyaXZlcnMvbWQvZG0tdGhpbi5jICAgICAgICAg IHwgOTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPiA+ID4gIGRyaXZlcnMv bWQvZG0uYyAgICAgICAgICAgICAgIHwgIDQgKysKPiA+ID4gIGluY2x1ZGUvbGludXgvZGV2aWNl LW1hcHBlci5oIHwgMTEgKysrKysKPiA+ID4gIDcgZmlsZXMgY2hhbmdlZCwgMTM5IGluc2VydGlv bnMoKyksIDMgZGVsZXRpb25zKC0pCj4gPiA+Cj4gPiAuLi4KPiA+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbWQvZG0tdGhpbi5jIGIvZHJpdmVycy9tZC9kbS10aGluLmMKPiA+ID4gaW5kZXggNjRj ZmNmNDY4ODFkLi5hYjNmMWFiZmFiYWYgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvbWQvZG0t dGhpbi5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvbWQvZG0tdGhpbi5jCj4gPiAuLi4KPiA+ID4gQEAg LTE5ODAsNiArMTk5Miw3MCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2NlbGwoc3RydWN0IHRoaW5f YyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCj4gPiA+ICAgICAgIH0KPiA+ ID4gIH0KPiA+ID4KPiA+ID4gK3N0YXRpYyB2b2lkIHByb2Nlc3NfcHJvdmlzaW9uX2NlbGwoc3Ry dWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCj4gPiA+ICt7 Cj4gPiA+ICsgICAgIGludCByOwo+ID4gPiArICAgICBzdHJ1Y3QgcG9vbCAqcG9vbCA9IHRjLT5w b29sOwo+ID4gPiArICAgICBzdHJ1Y3QgYmlvICpiaW8gPSBjZWxsLT5ob2xkZXI7Cj4gPiA+ICsg ICAgIGRtX2Jsb2NrX3QgYmVnaW4sIGVuZDsKPiA+ID4gKyAgICAgc3RydWN0IGRtX3RoaW5fbG9v a3VwX3Jlc3VsdCBsb29rdXBfcmVzdWx0Owo+ID4gPiArCj4gPiA+ICsgICAgIGlmICh0Yy0+cmVx dWV1ZV9tb2RlKSB7Cj4gPiA+ICsgICAgICAgICAgICAgY2VsbF9yZXF1ZXVlKHBvb2wsIGNlbGwp Owo+ID4gPiArICAgICAgICAgICAgIHJldHVybjsKPiA+ID4gKyAgICAgfQo+ID4gPiArCj4gPiA+ ICsgICAgIGdldF9iaW9fYmxvY2tfcmFuZ2UodGMsIGJpbywgJmJlZ2luLCAmZW5kKTsKPiA+ID4g Kwo+ID4gPiArICAgICB3aGlsZSAoYmVnaW4gIT0gZW5kKSB7Cj4gPiA+ICsgICAgICAgICAgICAg ciA9IGVuc3VyZV9uZXh0X21hcHBpbmcocG9vbCk7Cj4gPiA+ICsgICAgICAgICAgICAgaWYgKHIp Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAvKiB3ZSBkaWQgb3VyIGJlc3QgKi8KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKPiA+ID4gKwo+ID4gPiArICAgICAgICAgICAg IHIgPSBkbV90aGluX2ZpbmRfYmxvY2sodGMtPnRkLCBiZWdpbiwgMSwgJmxvb2t1cF9yZXN1bHQp Owo+ID4KPiA+IEhpIFNhcnRoYWssCj4gPgo+ID4gSSB0aGluayB3ZSBkaXNjdXNzZWQgdGhpcyBi ZWZvcmUuLiBidXQgcmVtaW5kIG1lIGlmL2hvdyB3ZSB3YW50ZWQgdG8KPiA+IGhhbmRsZSB0aGUg Y2FzZSBpZiB0aGUgdGhpbiBibG9ja3MgYXJlIHNoYXJlZC4uPyBXb3VsZCBhIHByb3Zpc2lvbiBv cAo+ID4gY2FycnkgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRpc3Rpbmd1aXNoIGFuIEZBTExPQ19G TF9VTlNIQVJFX1JBTkdFCj4gPiByZXF1ZXN0IGZyb20gdXBwZXIgbGF5ZXJzIHRvIGNvbmRpdGlv bmFsbHkgcHJvdmlzaW9uIGluIHRoYXQgY2FzZT8KPiA+Cj4gSSB0aGluayB0aGF0IHNob3VsZCBk ZXBlbmQgb24gaG93IHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudHMgdW5zaGFyaW5nOgo+IGFzc3Vt aW5nIHRoYXQgd2UgdXNlIHByb3Zpc2lvbiBvbiBmaXJzdCBhbGxvY2F0aW9uLCB1bnNoYXJpbmcg b24geGZzCj4gc2hvdWxkIHJlc3VsdCBpbiB4ZnMgY2FsbGluZyBSRVFfT1BfUFJPVklTSU9OIG9u IHRoZSBuZXdseSBhbGxvY2F0ZWQKPiBibG9ja3MgZmlyc3QuIEJ1dCBmb3IgZXh0NCwgd2UnZCBm YWlsIFVOU0hBUkVfUkFOR0UgdW5sZXNzIHByb3Zpc2lvbgo+IChpbnN0ZWFkIG9mIG5vcHJvdmlz aW9uLCBwcm92aXNpb25fb25fYWxsb2MpLCBpbiB3aGljaCBjYXNlLCB3ZSdkIHNlbmQKPiBSRVFf T1BfUFJPVklTSU9OLgo+IAoKSSB0aGluayBteSBxdWVzdGlvbiB3YXMgdW5jbGVhci4uLiBJdCBk b2Vzbid0IG5lY2Vzc2FyaWx5IGhhdmUgbXVjaCB0bwpkbyB3aXRoIHRoZSBmaWxlc3lzdGVtIG9y IGFzc29jaWF0ZWQgcHJvdmlzaW9uIHBvbGljeS4gU2luY2UgZG0tdGhpbiBjYW4Kc2hhcmUgYmxv Y2tzIGludGVybmFsbHkgdmlhIHNuYXBzaG90cywgZG8geW91IGludGVuZCB0byBzdXBwb3J0CkZM X1VOU0hBUkVfUkFOR0UgdmlhIGJsa2Rldl9mYWxsb2NhdGUoKSBhbmQgUkVRX09QX1BST1ZJU0lP Tj8KCklmIHNvLCB0aGVuIHByZXN1bWFibHkgdGhpcyB3YW50cyBhbiBVTlNIQVJFIHJlcXVlc3Qg ZmxhZyB0byBwYWlyIHdpdGgKUkVRX09QX1BST1ZJU0lPTi4gQWxzbywgdGhlIGRtLXRoaW4gY29k ZSBhYm92ZSBuZWVkcyB0byBjaGVjayB3aGV0aGVyIGFuCmV4aXN0aW5nIGJsb2NrIGl0IGZpbmRz IGlzIHNoYXJlZCBhbmQgYmFzaWNhbGx5IGRvIHdoYXRldmVyIENPVyBicmVha2luZwppcyBuZWNl c3NhcnkgZHVyaW5nIHRoZSBQUk9WSVNJT04gcmVxdWVzdC4KCklmIG5vdCwgd2h5PyBBbmQgd2hh dCBpcyBleHBlY3RlZCBiZWhhdmlvciBpZiBibGtkZXZfZmFsbG9jYXRlKCkgaXMKY2FsbGVkIHdp dGggRkxfVU5TSEFSRV9SQU5HRT8KCkJyaWFuIAoKPiBCZXN0Cj4gU2FydGhhawo+IAo+IAo+IFNh cnRoYWsKPiAKPiA+IEJyaWFuCj4gPgo+ID4gPiArICAgICAgICAgICAgIHN3aXRjaCAocikgewo+ ID4gPiArICAgICAgICAgICAgIGNhc2UgMDoKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJl Z2luKys7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ID4gKyAgICAgICAg ICAgICBjYXNlIC1FTk9EQVRBOgo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgYmlvX2luY19y ZW1haW5pbmcoYmlvKTsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByb3Zpc2lvbl9ibG9j ayh0YywgYmlvLCBiZWdpbiwgY2VsbCk7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBiZWdp bisrOwo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiA+ICsgICAgICAgICAg ICAgZGVmYXVsdDoKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIERNRVJSX0xJTUlUKAo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IGRtX3RoaW5fZmluZF9ibG9jaygp IGZhaWxlZDogZXJyb3IgPSAlZCIsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZnVuY19fLCByKTsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNlbGxfZGVmZXJfbm9f aG9sZGVyKHRjLCBjZWxsKTsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJpb19pb19lcnJv cihiaW8pOwo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgYmVnaW4rKzsKPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gPiArICAgICAgICAgICAgIH0KPiA+ID4gKyAgICAg fQo+ID4gPiArICAgICBiaW9fZW5kaW8oYmlvKTsKPiA+ID4gKyAgICAgY2VsbF9kZWZlcl9ub19o b2xkZXIodGMsIGNlbGwpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBwcm9j ZXNzX3Byb3Zpc2lvbl9iaW8oc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbykKPiA+ ID4gK3sKPiA+ID4gKyAgICAgZG1fYmxvY2tfdCBiZWdpbiwgZW5kOwo+ID4gPiArICAgICBzdHJ1 Y3QgZG1fY2VsbF9rZXkgdmlydF9rZXk7Cj4gPiA+ICsgICAgIHN0cnVjdCBkbV9iaW9fcHJpc29u X2NlbGwgKnZpcnRfY2VsbDsKPiA+ID4gKwo+ID4gPiArICAgICBnZXRfYmlvX2Jsb2NrX3Jhbmdl KHRjLCBiaW8sICZiZWdpbiwgJmVuZCk7Cj4gPiA+ICsgICAgIGlmIChiZWdpbiA9PSBlbmQpIHsK PiA+ID4gKyAgICAgICAgICAgICBiaW9fZW5kaW8oYmlvKTsKPiA+ID4gKyAgICAgICAgICAgICBy ZXR1cm47Cj4gPiA+ICsgICAgIH0KPiA+ID4gKwo+ID4gPiArICAgICBidWlsZF9rZXkodGMtPnRk LCBWSVJUVUFMLCBiZWdpbiwgZW5kLCAmdmlydF9rZXkpOwo+ID4gPiArICAgICBpZiAoYmlvX2Rl dGFpbih0Yy0+cG9vbCwgJnZpcnRfa2V5LCBiaW8sICZ2aXJ0X2NlbGwpKQo+ID4gPiArICAgICAg ICAgICAgIHJldHVybjsKPiA+ID4gKwo+ID4gPiArICAgICBwcm9jZXNzX3Byb3Zpc2lvbl9jZWxs KHRjLCB2aXJ0X2NlbGwpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICBzdGF0aWMgdm9pZCBwcm9j ZXNzX2JpbyhzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpbyAqYmlvKQo+ID4gPiAgewo+ID4g PiAgICAgICBzdHJ1Y3QgcG9vbCAqcG9vbCA9IHRjLT5wb29sOwo+ID4gPiBAQCAtMjIwMCw2ICsy Mjc2LDggQEAgc3RhdGljIHZvaWQgcHJvY2Vzc190aGluX2RlZmVycmVkX2Jpb3Moc3RydWN0IHRo aW5fYyAqdGMpCj4gPiA+Cj4gPiA+ICAgICAgICAgICAgICAgaWYgKGJpb19vcChiaW8pID09IFJF UV9PUF9ESVNDQVJEKQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgcG9vbC0+cHJvY2Vzc19k aXNjYXJkKHRjLCBiaW8pOwo+ID4gPiArICAgICAgICAgICAgIGVsc2UgaWYgKGJpb19vcChiaW8p ID09IFJFUV9PUF9QUk9WSVNJT04pCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBwcm9jZXNz X3Byb3Zpc2lvbl9iaW8odGMsIGJpbyk7Cj4gPiA+ICAgICAgICAgICAgICAgZWxzZQo+ID4gPiAg ICAgICAgICAgICAgICAgICAgICAgcG9vbC0+cHJvY2Vzc19iaW8odGMsIGJpbyk7Cj4gPiA+Cj4g PiA+IEBAIC0yNzE2LDcgKzI3OTQsOCBAQCBzdGF0aWMgaW50IHRoaW5fYmlvX21hcChzdHJ1Y3Qg ZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJpbyAqYmlvKQo+ID4gPiAgICAgICAgICAgICAgIHJldHVy biBETV9NQVBJT19TVUJNSVRURUQ7Cj4gPiA+ICAgICAgIH0KPiA+ID4KPiA+ID4gLSAgICAgaWYg KG9wX2lzX2ZsdXNoKGJpby0+Ymlfb3BmKSB8fCBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfRElTQ0FS RCkgewo+ID4gPiArICAgICBpZiAob3BfaXNfZmx1c2goYmlvLT5iaV9vcGYpIHx8IGJpb19vcChi aW8pID09IFJFUV9PUF9ESVNDQVJEIHx8Cj4gPiA+ICsgICAgICAgICBiaW9fb3AoYmlvKSA9PSBS RVFfT1BfUFJPVklTSU9OKSB7Cj4gPiA+ICAgICAgICAgICAgICAgdGhpbl9kZWZlcl9iaW9fd2l0 aF90aHJvdHRsZSh0YywgYmlvKTsKPiA+ID4gICAgICAgICAgICAgICByZXR1cm4gRE1fTUFQSU9f U1VCTUlUVEVEOwo+ID4gPiAgICAgICB9Cj4gPiA+IEBAIC0zMzU1LDYgKzM0MzQsOCBAQCBzdGF0 aWMgaW50IHBvb2xfY3RyKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBhcmdjLCBjaGFy ICoqYXJndikKPiA+ID4gICAgICAgcHQtPmxvd193YXRlcl9ibG9ja3MgPSBsb3dfd2F0ZXJfYmxv Y2tzOwo+ID4gPiAgICAgICBwdC0+YWRqdXN0ZWRfcGYgPSBwdC0+cmVxdWVzdGVkX3BmID0gcGY7 Cj4gPiA+ICAgICAgIHRpLT5udW1fZmx1c2hfYmlvcyA9IDE7Cj4gPiA+ICsgICAgIHRpLT5udW1f cHJvdmlzaW9uX2Jpb3MgPSAxOwo+ID4gPiArICAgICB0aS0+cHJvdmlzaW9uX3N1cHBvcnRlZCA9 IHRydWU7Cj4gPiA+Cj4gPiA+ICAgICAgIC8qCj4gPiA+ICAgICAgICAqIE9ubHkgbmVlZCB0byBl bmFibGUgZGlzY2FyZHMgaWYgdGhlIHBvb2wgc2hvdWxkIHBhc3MKPiA+ID4gQEAgLTQwNTMsNiAr NDEzNCw3IEBAIHN0YXRpYyB2b2lkIHBvb2xfaW9faGludHMoc3RydWN0IGRtX3RhcmdldCAqdGks IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbWl0cykKPiA+ID4gICAgICAgICAgICAgICBibGtfbGlt aXRzX2lvX29wdChsaW1pdHMsIHBvb2wtPnNlY3RvcnNfcGVyX2Jsb2NrIDw8IFNFQ1RPUl9TSElG VCk7Cj4gPiA+ICAgICAgIH0KPiA+ID4KPiA+ID4gKwo+ID4gPiAgICAgICAvKgo+ID4gPiAgICAg ICAgKiBwdC0+YWRqdXN0ZWRfcGYgaXMgYSBzdGFnaW5nIGFyZWEgZm9yIHRoZSBhY3R1YWwgZmVh dHVyZXMgdG8gdXNlLgo+ID4gPiAgICAgICAgKiBUaGV5IGdldCB0cmFuc2ZlcnJlZCB0byB0aGUg bGl2ZSBwb29sIGluIGJpbmRfY29udHJvbF90YXJnZXQoKQo+ID4gPiBAQCAtNDI0Myw2ICs0MzI1 LDkgQEAgc3RhdGljIGludCB0aGluX2N0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQg YXJnYywgY2hhciAqKmFyZ3YpCj4gPiA+ICAgICAgICAgICAgICAgdGktPm51bV9kaXNjYXJkX2Jp b3MgPSAxOwo+ID4gPiAgICAgICB9Cj4gPiA+Cj4gPiA+ICsgICAgIHRpLT5udW1fcHJvdmlzaW9u X2Jpb3MgPSAxOwo+ID4gPiArICAgICB0aS0+cHJvdmlzaW9uX3N1cHBvcnRlZCA9IHRydWU7Cj4g PiA+ICsKPiA+ID4gICAgICAgbXV0ZXhfdW5sb2NrKCZkbV90aGluX3Bvb2xfdGFibGUubXV0ZXgp Owo+ID4gPgo+ID4gPiAgICAgICBzcGluX2xvY2tfaXJxKCZ0Yy0+cG9vbC0+bG9jayk7Cj4gPiA+ IEBAIC00NDU3LDYgKzQ1NDIsNyBAQCBzdGF0aWMgdm9pZCB0aGluX2lvX2hpbnRzKHN0cnVjdCBk bV90YXJnZXQgKnRpLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1pdHMpCj4gPiA+Cj4gPiA+ICAg ICAgIGxpbWl0cy0+ZGlzY2FyZF9ncmFudWxhcml0eSA9IHBvb2wtPnNlY3RvcnNfcGVyX2Jsb2Nr IDw8IFNFQ1RPUl9TSElGVDsKPiA+ID4gICAgICAgbGltaXRzLT5tYXhfZGlzY2FyZF9zZWN0b3Jz ID0gMjA0OCAqIDEwMjQgKiAxNjsgLyogMTZHICovCj4gPiA+ICsgICAgIGxpbWl0cy0+bWF4X3By b3Zpc2lvbl9zZWN0b3JzID0gMjA0OCAqIDEwMjQgKiAxNjsgLyogMTZHICovCj4gPiA+ICB9Cj4g PiA+Cj4gPiA+ICBzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlIHRoaW5fdGFyZ2V0ID0gewo+ID4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCj4gPiA+IGlu ZGV4IGUxZWEzYTdiZDlkOS4uNGQxOWJhZTlkYTRhIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJz L21kL2RtLmMKPiA+ID4gKysrIGIvZHJpdmVycy9tZC9kbS5jCj4gPiA+IEBAIC0xNTg3LDYgKzE1 ODcsNyBAQCBzdGF0aWMgYm9vbCBpc19hYm5vcm1hbF9pbyhzdHJ1Y3QgYmlvICpiaW8pCj4gPiA+ ICAgICAgICAgICAgICAgY2FzZSBSRVFfT1BfRElTQ0FSRDoKPiA+ID4gICAgICAgICAgICAgICBj YXNlIFJFUV9PUF9TRUNVUkVfRVJBU0U6Cj4gPiA+ICAgICAgICAgICAgICAgY2FzZSBSRVFfT1Bf V1JJVEVfWkVST0VTOgo+ID4gPiArICAgICAgICAgICAgIGNhc2UgUkVRX09QX1BST1ZJU0lPTjoK PiA+ID4gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwo+ID4gPiAgICAgICAgICAg ICAgIGRlZmF1bHQ6Cj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ID4gQEAg LTE2MTEsNiArMTYxMiw5IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgX19wcm9jZXNzX2Fibm9ybWFs X2lvKHN0cnVjdCBjbG9uZV9pbmZvICpjaSwKPiA+ID4gICAgICAgY2FzZSBSRVFfT1BfV1JJVEVf WkVST0VTOgo+ID4gPiAgICAgICAgICAgICAgIG51bV9iaW9zID0gdGktPm51bV93cml0ZV96ZXJv ZXNfYmlvczsKPiA+ID4gICAgICAgICAgICAgICBicmVhazsKPiA+ID4gKyAgICAgY2FzZSBSRVFf T1BfUFJPVklTSU9OOgo+ID4gPiArICAgICAgICAgICAgIG51bV9iaW9zID0gdGktPm51bV9wcm92 aXNpb25fYmlvczsKPiA+ID4gKyAgICAgICAgICAgICBicmVhazsKPiA+ID4gICAgICAgZGVmYXVs dDoKPiA+ID4gICAgICAgICAgICAgICBicmVhazsKPiA+ID4gICAgICAgfQo+ID4gPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmggYi9pbmNsdWRlL2xpbnV4L2Rldmlj ZS1tYXBwZXIuaAo+ID4gPiBpbmRleCAwNGM2YWNmN2ZhYWEuLmI0ZDk3ZDVkNzViOCAxMDA2NDQK PiA+ID4gLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmgKPiA+ID4gKysrIGIvaW5j bHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmgKPiA+ID4gQEAgLTMzMyw2ICszMzMsMTIgQEAgc3Ry dWN0IGRtX3RhcmdldCB7Cj4gPiA+ICAgICAgICAqLwo+ID4gPiAgICAgICB1bnNpZ25lZCBudW1f d3JpdGVfemVyb2VzX2Jpb3M7Cj4gPiA+Cj4gPiA+ICsgICAgIC8qCj4gPiA+ICsgICAgICAqIFRo ZSBudW1iZXIgb2YgUFJPVklTSU9OIGJpb3MgdGhhdCB3aWxsIGJlIHN1Ym1pdHRlZCB0byB0aGUg dGFyZ2V0Lgo+ID4gPiArICAgICAgKiBUaGUgYmlvIG51bWJlciBjYW4gYmUgYWNjZXNzZWQgd2l0 aCBkbV9iaW9fZ2V0X3RhcmdldF9iaW9fbnIuCj4gPiA+ICsgICAgICAqLwo+ID4gPiArICAgICB1 bnNpZ25lZCBudW1fcHJvdmlzaW9uX2Jpb3M7Cj4gPiA+ICsKPiA+ID4gICAgICAgLyoKPiA+ID4g ICAgICAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGV4dHJhIGJ5dGVzIGFsbG9jYXRlZCBpbiBl YWNoIGlvIGZvciB0aGUKPiA+ID4gICAgICAgICogdGFyZ2V0IHRvIHVzZS4KPiA+ID4gQEAgLTM1 Nyw2ICszNjMsMTEgQEAgc3RydWN0IGRtX3RhcmdldCB7Cj4gPiA+ICAgICAgICAqLwo+ID4gPiAg ICAgICBib29sIGRpc2NhcmRzX3N1cHBvcnRlZDoxOwo+ID4gPgo+ID4gPiArICAgICAvKiBTZXQg aWYgdGhpcyB0YXJnZXQgbmVlZHMgdG8gcmVjZWl2ZSBwcm92aXNpb24gcmVxdWVzdHMgcmVnYXJk bGVzcyBvZgo+ID4gPiArICAgICAgKiB3aGV0aGVyIG9yIG5vdCBpdHMgdW5kZXJseWluZyBkZXZp Y2VzIGhhdmUgc3VwcG9ydC4KPiA+ID4gKyAgICAgICovCj4gPiA+ICsgICAgIGJvb2wgcHJvdmlz aW9uX3N1cHBvcnRlZDoxOwo+ID4gPiArCj4gPiA+ICAgICAgIC8qCj4gPiA+ICAgICAgICAqIFNl dCBpZiB3ZSBuZWVkIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgaW4tZmxpZ2h0IGJpb3Mgd2hlbiBz d2FwcGluZy4KPiA+ID4gICAgICAgICovCj4gPiA+IC0tCj4gPiA+IDIuMzcuMwo+ID4gPgo+ID4K PiAKCi0tCmRtLWRldmVsIG1haWxpbmcgbGlzdApkbS1kZXZlbEByZWRoYXQuY29tCmh0dHBzOi8v bGlzdG1hbi5yZWRoYXQuY29tL21haWxtYW4vbGlzdGluZm8vZG0tZGV2ZWwK